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

Отличия:

  1. Тип возврата RenderPartial является void, в то время как Partial возвращается MvcHtmlString

  2. Синтаксис для вызова Partial() а также RenderPartial() методы в представлениях Razor

    @ Html.Partial ("PartialViewName")
    @ {Html.RenderPartial ("PartialViewName"); }

  3. Синтаксис для вызова 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"

Другие вопросы по тегам