У ASP.NET MVC, яка різниця між:
Html.Partial
іHtml.RenderPartial
Html.Action
іHtml.RenderAction
У ASP.NET MVC, яка різниця між:
Html.Partial
і Html.RenderPartial
Html.Action
і Html.RenderAction
Відповіді:
Html.Partial
повертає рядок Html.RenderPartial
дзвонить Write
внутрішньо і повертається void
.
Основне використання:
// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }
// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>
У фрагменті вище обидва дзвінки дадуть однаковий результат.
Хоча можна зберігати вихідну інформацію Html.Partial
у змінній або повернути її з методу, не можна цього зробити Html.RenderPartial
.
Результат буде записаний у Response
потік під час виконання / оцінки.
Це стосується Html.Action
і та Html.RenderAction
.
Html.Partial()
був створений, щоб мати більш вільний синтаксис з Razor. Як сказав @Vlad, Html.RenderPartial()
він більш ефективний.
Подумайте про @ Html.Partial як HTML-код, скопійований на батьківську сторінку. Подумайте про @ Html.RenderPartial як контроль користувача .ascx, включений на батьківську сторінку. Керування користувачами .ascx має набагато більше витрат.
'@ Html.Partial' повертає HTML-кодований рядок, який будується вбудованим разом із батьківським. Це доступ до батьківської моделі.
'@ Html.RenderPartial' повертає еквівалент управління .ascx користувача. Він отримує власну копію ViewDataDictionary сторінки та зміни, внесені у ViewData RenderPartial, не впливають на ViewData батьків.
Використовуючи рефлексію, ми знаходимо:
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData)
{
MvcHtmlString mvcHtmlString;
using (StringWriter stringWriter = new StringWriter(CultureInfo.CurrentCulture))
{
htmlHelper.RenderPartialInternal(partialViewName, viewData, model, stringWriter, ViewEngines.Engines);
mvcHtmlString = MvcHtmlString.Create(stringWriter.ToString());
}
return mvcHtmlString;
}
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName)
{
htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines);
}
Partial
, що рендеринг в буфер не означає, що він відображається асинхронно - зовсім навпаки - я не бачу, як можна стверджувати RenderPartial
, що "більш ресурсомісткий".
Ось що я знайшов:
Використовуйте RenderAction, коли у вас немає моделі для надсилання до перегляду та у вас є багато html, щоб повернути, що не потрібно зберігати у змінній.
Використовуйте Дію, коли у вас немає моделі для надсилання до перегляду та маєте трохи тексту, щоб повернути, який потрібно зберігати у змінній.
Використовуйте RenderPartial, коли у вас є модель для надсилання до перегляду, і там буде багато html, який не потрібно зберігати у змінній.
Використовуйте Partial, коли у вас є модель для надсилання до перегляду, і там буде трохи тексту, який потрібно зберігати в змінній.
RenderAction і RenderPartial проходять швидше.
@Html.Partial
і @Html.RenderPartial
використовуються, коли модель часткового перегляду відповідає кореспонденції батьківської моделі, нам не потрібно створювати жодних методів дій, щоб викликати це.
@Html.Action
і @Html.RenderAction
використовуються, коли модель часткового перегляду не залежить від батьківської моделі, в основному вона використовується, коли ви хочете відобразити будь-який вміст віджетів на сторінці. Ви повинні створити метод дії, який повертає результат часткового перегляду під час виклику методу з подання.
Детальніше про запитання:
"Коли Html.RenderPartial () викликається лише іменем часткового перегляду, ASP.NET MVC передасть частковому виду ті самі об'єкти словника Model і ViewData, які використовуються шаблоном виду виклику."
“NerdDinner” від Professional ASP.NET MVC 1.0
Тип повернення Html.RenderAction
- void
це означає, що він безпосередньо надає відповіді в Перегляді, де тип повернення Html.Action
- MvcHtmlString
Ви можете переглядати його візуалізацію в контролері та змінювати його, використовуючи наступний метод
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Це поверне рядок Html Перегляду.
Це також стосується Html.Partial
таHtml.RenderPartial
Часткове або RenderPartial: Не потрібно створювати метод дій. використовувати, коли дані, що відображаються на частковому поданні, вже є у моделі поточної сторінки.
Дія або RenderAction: потрібен метод дочірньої дії. використовувати, коли дані для відображення на перегляді мають незалежну модель.
Відмінності:
Тип повернення RenderPartial
є void
, де як Partial
повертаєтьсяMvcHtmlString
Синтаксис виклику Partial()
та RenderPartial()
методи в представленнях Razor
@ Html.Partial ("PartialViewName")
@ {Html.RenderPartial ("PartialViewName"); }
Синтаксис виклику Partial()
та RenderPartial()
способів у представленнях веб-форм
[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName"); %]
Нижче наведені 2 поширених питання щодо інтерв'ю, пов'язані з Partial()
та RenderPartial()
коли ви використовуєте Partial()
їх RenderPartial()
і навпаки?
Основна відмінність полягає в тому, що RenderPartial()
return void і вихід буде записаний безпосередньо у вихідний потік, де як Partial()
метод повертається MvcHtmlString
, який може бути призначений змінній та маніпулювати нею, якщо потрібно. Отже, коли виникає необхідність призначити вихідну змінну для маніпулювання нею, тоді використовуйте Partial (), інакше використовуйте RenderPartial ().
Який з них краще для продуктивності?
З точки зору продуктивності, рендерінг безпосередньо у вихідний потік кращий. RenderPartial()
робить точно те ж саме і краще для виконання Partial()
.
Для "часткового" я завжди використовую це так:
Якщо є щось, що вам потрібно включити на сторінку, яку вам потрібно перейти через контролер (як, наприклад, виклик Ajax), тоді використовуйте "Html.RenderPartial".
Якщо у вас є "статичний", який не пов'язаний з контролером, а просто у папці "спільний доступ", наприклад, використовуйте "HTML.partial"
@Html.Partial
повертає перегляд у кодованій HTML рядку та використовує той самий TextWriter
об’єкт перегляду .
@Html.RenderPartial
цей метод повернення void
.
@Html.RenderPartial
швидше, ніж@Html.Partial
Синтаксис для PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}