У Razor view есть некоторые проблемы, что не так с этим foreach, вызывающим частичное переполнение стека

#asp.net-mvc #razor

#asp.net-mvc #razor

Вопрос:

Моя страница просмотра razor выглядит так:

  @foreach (var comment in Model.Comments)
 {
           @Html.RenderPartial("Comment", comment);

 }
  

И мое частичное представление находится в /Shared/Comment.cshtml

 @model Comment

<div>
<span class="user">@Model.Name</span>
...

</p>
  

Я получаю эту ошибку:

 Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments

(it then highlights the call to @Html.RenderPartial("Comment", comment);
  

Ответ №1:

Вам не нужен символ «@» перед Html, поскольку он указан перед любым html:

  @foreach (var comment in Model.Comments)
 {
    Html.RenderPartial("Comment", comment);    
 }
  

Кроме того, Html.RenderPartial ничего не возвращает. Итак, он должен выполняться в блоке кода (приведенный выше случай учитывается).

Синтаксис @[some method] действителен только для методов, которые возвращают что-то, что Razor может преобразовать в строку.