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


93

Який належний спосіб надання дочірнього шаблону?

І яка різниця? Обидва, здається, працюють на мене.

А чому @Html.RenderPartial()більше не працює?

Відповіді:


127
Html.Partial("MyView")

Здійснює перегляд "MyView" an 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 ви мали на увазі частковий vd RenderPartial?
Cacho Santa

1
@cacho: так, мій коментар повинен читати @Html.Partial("MyView")порівняно@{Html.RenderPartial("MyView");}
Фауст

2
Невелика корекція: другий параметр у RenderPage () не є моделлю, це параметр [] Об'єкт, доступ до якого здійснюється через властивість PageData. Здається, працює як вище, тому що за замовчуванням модель зі сторінки "батьків" передається "дочірній". msdn.microsoft.com/en-us/library / ...
Jon

Чи є спосіб вкласти повну сторінку уздовж її моделі, зателефонувавши RenderPage? Я хочу вкласти іншу сторінку, вказавши конкретний параметр запиту, який би, в свою чергу, фільтрував дані на цій сторінці, а крім того, видалив власний макет.
Шиммі Вайцхандлер

17

я віддаю перевагу

@RenderPage("_LayoutHeader.cshtml")

Над

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

Тільки тому, що синтаксис легший і він легше читається. Окрім цього, схоже, що функціональних відмінностей немає.

EDIT: Однією з переваг RenderPartial є те, що вам не доведеться вказувати весь шлях або розширення файлу, він автоматично шукатиме загальні місця.


1
Я думаю, що це повинен бути коментар, а не відповідь. Також я згоден із- RenderPageза синтаксису.
Іман Махмудінасаб

6

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

Це дещо ефективніше, ніж буферизація виведеного HTML з часткового перегляду, оскільки він все одно буде записаний у потік відповідей. Якщо ви віддаєте перевагу більш послідовному синтаксису, ви можете використовувати метод Html.Partial , який виконує точно те саме, що і метод RenderPartial , але повертає фрагмент HTML і може використовуватися як @ Html.Partial ("Продукт", с).


2

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


0
@RenderPages() 

Вищезазначене не працює в ASP.NET MVC. Він працює лише на веб-сторінках.

@Html.Partial("_Footer")

Вам потрібно буде використовувати вищезазначене в ASP.NET MVC.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.