Предоставление частичных представлений с помощью Razor в MVC5
Я пытаюсь получить частичное представление для рендеринга с помощью Razor в MVC5. Когда я использую
@{ Html.RenderPartial("ViewName", model); }
Я получаю ошибку парсера:
Неожиданный символ "{" после символа "@". Как только внутри тела блока кода (@if {}, @{} и т.д.) Вам не нужно использовать "@{" для переключения на код.
Когда я удаляю {}
, т.е.:
@Html.RenderPartial("ViewName", model);
Я получаю ошибку компиляции
Невозможно неявно преобразовать тип 'void' в 'object'.
Что я делаю неправильно?
Ответы
Ответ 1
Вы не разместили контекст этого кода, но эта ошибка возникает только тогда, когда вы используете @
непосредственно внутри кодового блока без каких-либо HTML-оберток. Например:
@if (true) {
@{ Html.RenderPartial(...); }
}
Дала бы вам ошибку, а:
@if (true) {
<div>
@{ Html.RenderPartial(...); }
</div>
}
Было бы хорошо. Вы также можете решить эту проблему, просто удалив блок кода для Html.RenderPartial
целиком, включая @
:
@if (true) {
Html.RenderPartial(...);
}
Ответ 2
Вы также можете использовать @Html.Partial("~/View/Home/myview.cshtml")
Он возвращает строку, в то время как Html.RenderPartial
вызывает запись внутри, и возвращает void.
Ответ 3
Это неправильно:
@Html.RenderPartial("ViewName", model);
Это правильно:
@{ Html.RenderPartial("ViewName", model); }
Ошибка синтаксического анализа может быть вызвана содержимым частичного представления. Например, если у вас есть адрес электронной почты, убедитесь, что вы используете @@для правильного выхода из знака @.
Неожиданный символ "{" после символа "@". Однажды внутри тела кода block (@if {}, @{} и т.д.), вам не нужно использовать "@{" для переключения на код.
Ответ 4
можете ли вы показать код, окружающий ваш RenderPartial? Я предполагаю, что вы находитесь в цикле, если блок или какой-то другой код блока. Если это так, вы просто вызываете
Html.RenderPartial("ViewName", model);
Ответ 5
Пожалуйста, просмотрите свой код, возможно, вы получите эту ошибку, потому что используете этот код:
@{ Html.RenderPartial("ViewName", model); }
внутри любого другого предложения @{}
. Пожалуйста, внимательно прочитайте сообщение об ошибке, которое вы получите в браузере, вам не нужно использовать @{}
для переключения на код, потому что вы уже находитесь внутри, поэтому просто удалите @{
и }
, и вы должны получить он работает правильно.