Razor: @Html.Partial() vs @RenderPage()

Каков подходящий способ воспроизведения дочернего шаблона?

И какая разница? Оба, похоже, работают на меня.

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

Ответ 1

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)

Ответ 2

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

@RenderPage("_LayoutHeader.cshtml")

Более

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

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

EDIT: одно преимущество RenderPartial - вам не нужно указывать весь путь или расширение файла, и он автоматически будет искать обычные места.

Ответ 3

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

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

Ответ 4

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