Формат html.Частичный vs Html.RenderPartial & Html.Действие против Html.RenderAction
In 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
в переменной или вернуть его из метода, one не может сделать это с помощью Html.RenderPartial
. Результат будет записан в Response
поток во время выполнения/оценки.
это касается Html.Action
и Html.RenderAction
.
подумайте о @Html.Частично как HTML-код, скопированный на родительскую страницу. Подумайте о @Html.RenderPartial как .пользовательский элемент управления ascx включен в родительскую страницу. -. пользовательский контроль ascx имеет гораздо больше накладных расходов.
'@HTML-код.Partial' возвращает строку в html-кодировке, которая строится вместе с родителем. Он обращается к родительской модели.
'@HTML-код.RenderPartial' возвращает эквивалент a .пользовательский элемент управления 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, который не нужно хранить в переменной.
использовать частичная когда у вас есть модель для отправки в представление, и будет немного текста, который необходимо сохранить в переменной.
RenderAction и RenderPartial быстрее.
по-моему @Html.RenderPartial()
быстрее, чем @Html.Partial()
в связи в HTML.RenderPartial дает быстрый ответ на вывод.
потому что когда я использую @Html.Partial()
мой сайт занимает больше времени для загрузки в сравнении с @Html.RenderPartial()
@Html.Partial
и @Html.RenderPartial
используются, когда ваша модель частичного представления соответствует родительской модели, нам не нужно создавать какой-либо метод действия для вызова этого.
@Html.Action
и @Html.RenderAction
используются, когда ваша модель частичного представления независима от родительской модели, в основном она используется, когда вы хотите отобразить любое содержимое типа виджета на странице. Необходимо создать метод действия, который возвращает результат частичного представления при вызове метода из представления.
еще вопрос:
" Когда Html.RenderPartial () вызывается только с именем частичного вид, ASP.NET MVC передаст частичному виду ту же модель и Объекты словаря ViewData, используемые вызывающим шаблоном представления."
" NerdDinner " от профессионала ASP.NET MVC 1.0
тип возвращаемого Html.RenderAction
is void
это означает, что он непосредственно отображает ответы в представлении, где тип возврата Html.Action
is 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
isvoid
, где asPartial
возвращаетMvcHtmlString
-
синтаксис для ссылки
Partial()
иRenderPartial()
методы в Razor views@HTML-код.Partial ("PartialViewName")
@{ формат HTML.RenderPartial("PartialViewName"); } синтаксис для ссылки
Partial()
иRenderPartial()
методы в webform вид
[%: HTML-код.Partial ("PartialViewName")%]
[% формат HTML.RenderPartial ("PartialViewName");%]
ниже приведены 2 Общие вопросы интервью, связанные с Partial()
и RenderPartial()
Когда бы вы использовали Partial()
над RenderPartial()
и наоборот?
главное отличие в том, что RenderPartial()
возвращает void и вывод будет записан непосредственно в выходной поток, где в качестве Partial()
возвращает метод MvcHtmlString
, который может быть назначен переменной и при необходимости управлять ею. Итак, когда есть необходимость назначить выход переменной для манипулирования ею, используйте Partial (), иначе используйте RenderPartial().
какой из них лучше для производительности?
С точки зрения производительности, визуализации непосредственно в выходной поток лучше. RenderPartial()
делает то же самое и лучше для производительности свыше Partial()
.
Html.Partial
: returns MvcHtmlString
и медленно
Html.RenderPartial
: непосредственно рендеринг / запись в выходной поток и возвращает void
и это очень быстро по сравнению с Html.Partial
для "частичный" я всегда использую его следующим образом:
Если есть что-то, что вам нужно включить в страницу, которую вам нужно пройти через контроллер (например, с вызовом Ajax), используйте "Html.RenderPartial".
Если у вас есть "статический" include, который не связан с контроллером как таковым и просто в папке "общий", например, используйте " HTML.частичное"