Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction

В ASP.NET MVC, в чем разница между:

  • Html.Partial и Html.RenderPartial
  • Html.Action и Html.RenderAction

    Html.Partial возвращает строку. Html.RenderPartial calls Write внутренне и возвращаете void .

    Основное использование:

     // Razor syntax @Html.Partial("ViewName") @{ Html.RenderPartial("ViewName"); } // WebView syntax <%: Html.Partial("ViewName") %> <% Html.RenderPartial("ViewName"); %> 

    В приведенном выше fragmentе оба вызова приведут к такому же результату.

    Хотя можно сохранить вывод Html.Partial в переменной или вернуть его из метода, это невозможно с помощью Html.RenderPartial . Результат будет записан в stream Response во время выполнения / оценки.

    Это также относится к Html.Action и Html.RenderAction .

    Подумайте о @ Html.Partial как HTML-код, скопированный на родительскую страницу. Подумайте о @ Html.RenderPartial как пользовательском элементе .ascx, включенном в родительскую страницу. У пользовательского элемента управления .ascx гораздо больше накладных расходов.

    ‘@ Html.Partial’ возвращает строку, закодированную в html, которая построена встроенной с родителем. Он обращается к родительской модели.

    ‘@ Html.RenderPartial’ возвращает эквивалент пользовательского элемента .ascx. Он получает свою собственную копию ViewDataDictionary страницы и изменения, внесенные в ViewData RenderPartial, не влияют на ViewData родителя.

    Используя reflection, находим:

     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, которые не нужно хранить в переменной.

    Используйте Partial, если у вас есть модель для отправки в представление, и будет немного текста, который нужно сохранить в переменной.

    RenderAction и RenderPartial работают быстрее.

    Согласно мне @Html.RenderPartial() имеет более быстрое выполнение, чем @Html.Partial() из-за Html.RenderPartial дает быстрый ответ на Output.

    Потому что, когда я использую @Html.Partial() , мой сайт занимает больше времени для загрузки по сравнению с @Html.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 Вы можете поймать его визуализацию в controllerе и изменить его, используя следующий метод

     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 void , когда Partial возвращает MvcHtmlString

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

      @ Html.Partial ( “PartialViewName”)
      @ {Html.RenderPartial (“PartialViewName”); }

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

    [%: Html.Partial (“PartialViewName”)%]
    [% Html.RenderPartial (“PartialViewName”); %]

    Ниже приведены два общих вопроса для интервью, связанных с Partial() и RenderPartial() Когда вы используете Partial() над RenderPartial() и наоборот?

    Основное отличие состоит в том, что RenderPartial() возвращает void, и вывод будет записан непосредственно в выходной stream, где, поскольку метод Partial() возвращает MvcHtmlString , который может быть назначен переменной и манипулировать им, если это необходимо. Поэтому, когда есть необходимость назначить вывод переменной для ее обработки, используйте Partial (), иначе используйте RenderPartial ().

    Какой из них лучше для производительности?

    С точки зрения производительности, рендеринг непосредственно в выходной stream лучше. RenderPartial() делает то же самое и лучше работает над Partial() .

    Html.Partial : возвращает MvcHtmlString и медленно

    Html.RenderPartial : прямой рендеринг / запись в streamе вывода и возвращает void и это очень быстро по сравнению с Html.Partial

    Для «частичного» я ​​всегда использую его следующим образом:

    Если есть что-то, что вам нужно включить в страницу, которую вам нужно пройти через controller (например, с вызовом Ajax), используйте «Html.RenderPartial».

    Если у вас включен «статический», который не связан с controllerом per se и как раз в «общей» папке, например, используйте «HTML.partial»,

    @Html.Partial возвращает вид в HTML-кодированной строке и использует тот же объект TextWriter . @Html.RenderPartial этот метод возвращает void . @Html.RenderPartial быстрее, чем @Html.Partial

    Синтаксис для PartialView :

      [HttpGet] public ActionResult AnyActionMethod { return PartialView(); } 
    Давайте будем гением компьютера.