Html.Partial против Html.RenderPartial & Html.Action против Html.RenderAction
В ASP.NET MVC какая разница между:
Html.Partial
а такжеHtml.RenderPartial
Html.Action
а такжеHtml.RenderAction
13 ответов
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 как о 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);
}
Вот что я нашел:
Используйте RenderAction, когда у вас нет модели для отправки в представление, и у вас есть много html-файлов для возврата, которые не нужно хранить в переменной.
Используйте действие, если у вас нет модели для отправки в представление и имеется небольшой текст для возврата, который необходимо сохранить в переменной.
Используйте RenderPartial, когда у вас есть модель для отправки в представление, и будет много HTML, который не нужно хранить в переменной.
Используйте Partial, если у вас есть модель для отправки в представление, и там будет немного текста, который нужно сохранить в переменной.
RenderAction и RenderPartial работают быстрее.
Разница первая возвращает MvcHtmlString
но второе (Render..
) выводит прямо в ответ.
@Html.Partial
а также @Html.RenderPartial
используются, когда ваша модель частичного представления соответствует родительской модели, нам не нужно создавать какой-либо метод действия для вызова этого.
@Html.Action
а также @Html.RenderAction
используются, когда ваша модель частичного представления не зависит от родительской модели, в основном она используется, когда вы хотите отобразить содержимое любого типа виджета на странице. Вы должны создать метод действия, который возвращает частичный результат просмотра при вызове метода из представления.
По мне @Html.RenderPartial()
имеет более быстрое исполнение, чем @Html.Partial()
Благодаря Html.RenderPartial дает быстрый ответ на вывод.
Потому что когда я использую @Html.Partial()
мой сайт загружается больше времени по сравнению с @Html.RenderPartial()
Подробнее о вопросе:
"Когда Html.RenderPartial() вызывается только с именем частичного представления, ASP.NET MVC передает частичному представлению те же объекты словаря Model и ViewData, которые используются в вызывающем шаблоне представления".
"NerdDinner" из Профессиональной ASP.NET MVC 1.0
Отличия:
Тип возврата
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()
возвращает void, и вывод будет записан непосредственно в выходной поток, где в качестве Partial()
метод возвращает MvcHtmlString
, который может быть назначен переменной и манипулировать ею, если требуется. Таким образом, когда есть необходимость назначить вывод переменной для манипулирования ею, затем используйте Partial(), иначе используйте RenderPartial().
Какой из них лучше для производительности?
С точки зрения производительности лучше рендеринг непосредственно в выходной поток. RenderPartial()
делает то же самое и лучше для производительности над Partial()
,
Partial или RenderPartial: нет необходимости создавать метод действия. используйте, когда данные для отображения в частичном представлении уже присутствуют в модели текущей страницы.
Action или RenderAction: требуется дочерний метод действия. используйте, когда данные для отображения в представлении имеют независимую модель.
Тип возврата Html.RenderAction
является void
это означает, что он непосредственно отображает ответы в View, где тип возвращаемого значения 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
Html.Partial
: возвращается MvcHtmlString
и медленно
Html.RenderPartial
: напрямую выводить / записывать в выходной поток и возвращать void
и это очень быстро по сравнению с Html.Partial
@Html.Partial
возвращает представление в HTML-кодированной строке и использовать то же представление TextWriter
объект.@Html.RenderPartial
этот метод возврата void
,@Html.RenderPartial
быстрее чем @Html.Partial
Синтаксис для PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}
Для "частичного" я всегда использую его следующим образом:
Если есть что-то, что вам нужно включить в страницу, которую вам нужно пройти через контроллер (как если бы вы использовали Ajax-вызов), тогда используйте "Html.RenderPartial".
Если у вас есть "статическое" включение, которое не связано с контроллером как таковое, а просто находится в папке "shared", например, используйте "HTML.partial"