Формат 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);
}

разница первая возвращает MvcHtmlString но второй (Render..) выводит прямо на ответ.


вот что я нашел:

использовать 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: требуется дочерний метод действия. использовать, когда данные для отображения на вид самостоятельная модель.


отличия:

  1. тип возвращаемого RenderPartial is void, где as Partial возвращает MvcHtmlString

  2. синтаксис для ссылки Partial() и RenderPartial() методы в Razor views

    @HTML-код.Partial ("PartialViewName")
    @{ формат HTML.RenderPartial("PartialViewName"); }

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


@Html.Partial возвращает представление в HTML-кодированной строке и использовать тот же вид