Синтаксис Html.RenderPartial () в Razor

95

Это работает, потому что возвращает результат частичного рендеринга представления в виде строки:

@Html.Partial("Path/to/my/partial/view")

Но я предпочитаю использовать RenderPartialи, кажется, мне нужно написать:

@{Html.RenderPartial("Path/to/my/partial/view");}

вместо того:

@Html.RenderPartial("Path/to/my/partial/view");

Чтобы заставить его работать. Сообщение об ошибке:

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

Есть ли лучший способ вместо открытия блока кода @{...}только для одного вызова метода?

artvolk
источник
Какую ошибку вы получаете при попытке использовать?@Html.RenderPartial()
Нил Найт
Я добавил сообщение в свой пост. Я понимаю, почему отображается ошибка. @ Html.RenderPartial () анализируется примерно как <%?: @ Html.RenderPartial ()?>, Что неверно, а не как <? Html.RenderPartial (); ?>, но я ищу обходной путь.
artvolk 08
Связанные: Html.Partial против Html.RenderPartial и Html.Action против Html.RenderAction . Кстати, почему вы предпочитаете использовать RenderPartial?
Паоло Моретти

Ответы:

142
  • RenderPartial()- это метод void, который записывает в поток ответа. Метод void в C # нуждается в a ;и, следовательно, должен быть заключен в { }.

  • Partial()- это метод, который возвращает MvcHtmlString . В Razor вы можете вызвать свойство или метод, который возвращает такую ​​строку, с помощью только @префикса, чтобы отличить ее от обычного HTML-кода на странице.

Офер Зелиг
источник
1
Почему вы предпочитаете использовать Html.RenderPartial вместо Html.Partial? Если вы по какой-то причине хотите / должны использовать Html.RenderPartial, обходного пути нет - это синтаксис.
Офер Зелиг
5
Я использую его, потому что он должен быть более эффективным (потому что он не возвращает огромную строку).
artvolk 08
45

Html.RenderPartial () - это метод void - вы можете проверить, является ли метод недействительным, наведя указатель мыши на вызов RenderPartial в своем коде, и вы увидите текст (расширение) void HtmlHelper.RenderPartial ...

Методы Void требуют точки с запятой в конце вызывающего кода.

В движке просмотра Webforms вы бы заключили свой вызов Html.RenderPartial () в укусы пчел <%%>

вот так

<% Html.RenderPartial("Path/to/my/partial/view"); %>

при использовании механизма просмотра Razor эквивалент

@{Html.RenderPartial("Path/to/my/partial/view");}
Николас Мюррей
источник
5
«пчелиные укусы» - это впервые (для меня?)
JoeBrockhaus
9
@Html.Partial("NameOfPartialView")
RouR
источник
Хочу использовать Html.RenderPartial(), поэтому и задал этот вопрос. Подробности: «С точки зрения производительности утверждалось, что рендеринг непосредственно в выходной поток лучше (именно поэтому они пошли с void RenderPartial для начала)». отсюда stackoverflow.com/a/2729851/118810
artvolk
0

Если вам предоставляется этот формат, он принимает вид ссылки на другую страницу или другую ссылку. Частичный вид, который в основном используется для переноса файлов html из одного места в другое.

Санкар
источник