Каков подходящий способ воспроизведения дочернего шаблона?
И какая разница? Оба, похоже, работают на меня.
И почему @Html.RenderPartial()
больше не работает?
Каков подходящий способ воспроизведения дочернего шаблона?
И какая разница? Оба, похоже, работают на меня.
И почему @Html.RenderPartial()
больше не работает?
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)
Я предпочитаю
@RenderPage("_LayoutHeader.cshtml")
Более
@{ Html.RenderPartial("_LayoutHeader"); }
Только потому, что синтаксис проще, и он более читабельен. Помимо этого, похоже, нет никаких различий в функциональности.
EDIT: одно преимущество RenderPartial - вам не нужно указывать весь путь или расширение файла, и он автоматически будет искать обычные места.
Метод RenderPartial не возвращает HTML-разметку, как большинство других вспомогательных методов. Вместо этого он пишет содержимое непосредственно в поток ответов, поэтому мы должны называть его как полную строку С#, используя точку с запятой.
Это немного более эффективно, чем буферизация отображаемого HTML с частичного представления, поскольку он будет записан в поток ответов в любом случае. Если вы предпочитаете более последовательный синтаксис, вы можете использовать метод Html.Partial, который делает то же самое, что и метод RenderPartial, но возвращает фрагмент HTML и может использоваться как @Html.Partial( "Продукт", p).
Мы также можем передавать модель с использованием частичных представлений. @Html.Partial( "MyView", "MyModel" );