Бритва: @ Html.Partial () против @RenderPage ()

94

Как лучше всего отрисовать дочерний шаблон?

А какая разница? Мне кажется, оба работают.

И почему @Html.RenderPartial()больше не работает?

Евгений
источник

Ответы:

128
Html.Partial("MyView")

Отображает представление «MyView» в файл MvcHtmlString. Он следует стандартным правилам просмотра представлений (т.е. проверять текущий каталог, затем проверять Sharedкаталог).

Html.RenderPartial("MyView")

Делает то же самое Html.Partial(), за исключением того, что записывает свой вывод непосредственно в поток ответа. Это более эффективно, потому что содержимое представления не буферизуется в памяти. Однако, поскольку метод не возвращает никаких результатов, @Html.RenderPartial("MyView")работать не будет. Вы должны обернуть вызов в блоке кода вместо: @{Html.RenderPartial("MyView");}.

RenderPage("MyView.cshtml")

Отображает указанное представление (идентифицируемое по пути и имени файла, а не по имени представления) непосредственно в поток ответа, например Html.RenderPartial(). Вы можете предоставить любую понравившуюся модель для представления, включив ее в качестве второго параметра.

RenderPage("MyView.cshtml", MyModel)
Аннабель
источник
8
Есть ли какие-нибудь показатели повышения эффективности @ {Html.RenderPartial ("MyView");} по сравнению с @ Html.RenderPartial ("MyView")?
Faust
@ Фауст, ты имел ввиду Partial vd RenderPartial?
Cacho Santa
1
@cacho: да, мой комментарий следует читать @Html.Partial("MyView")vs.@{Html.RenderPartial("MyView");}
Faust
2
Небольшая поправка: второй параметр в RenderPage () - это не модель, это объект param [], доступ к которому осуществляется через свойство PageData. Похоже, что это работает, как указано выше, потому что по умолчанию модель с «родительской» страницы передается «дочерней». msdn.microsoft.com/en-us/library/…
Джон,
Есть ли способ вложить всю страницу в ее модель с помощью вызова RenderPage? Я хочу вложить другую страницу, указав конкретный параметр запроса, который, в свою очередь, будет фильтровать данные на этой странице и, кроме того, удалять собственный макет.
Шимми Вайцхандлер
17

я предпочитаю

@RenderPage("_LayoutHeader.cshtml")

Над

@{ Html.RenderPartial("_LayoutHeader"); }

Только потому, что синтаксис проще и читабельнее. Кроме этого, похоже, нет никаких различий в функциональности.

РЕДАКТИРОВАТЬ: Одно из преимуществ RenderPartial заключается в том, что вам не нужно указывать весь путь или расширение файла, он будет автоматически искать общие места.

Райан Сэмпсон
источник
1
Я думаю, это должен быть комментарий, а не ответ. Также я согласен с RenderPageсинтаксисом.
Иман Махмудинасаб
6

Метод RenderPartial не возвращает разметку HTML, как большинство других вспомогательных методов. Вместо этого он записывает содержимое непосредственно в поток ответа, поэтому мы должны называть его как полную строку C #, используя точку с запятой.

Это немного более эффективно, чем буферизация визуализированного HTML из частичного представления, поскольку он все равно будет записан в поток ответа. Если вы предпочитаете более последовательный синтаксис, вы можете использовать метод Html.Partial , который выполняет те же функции, что и метод RenderPartial , но возвращает фрагмент HTML и может использоваться как @ Html.Partial («Продукт», p).

Омид Шариати
источник
2

Мы также можем передать модель, используя частичные представления. @ Html.Partial ("MyView", "MyModel");

байрам
источник
0
@RenderPages() 

Вышеупомянутое не работает в ASP.NET MVC. Работает только на веб-страницах.

@Html.Partial("_Footer")

Вам нужно будет использовать это в ASP.NET MVC.

Умар Афтаб
источник