Html.Partial与Html.RenderPartial&Html.Action与Html.RenderAction

在ASP.NET MVC中,有什么区别:

  • Html.PartialHtml.RenderPartial
  • Html.ActionHtml.RenderAction

  • Html.Partial返回一个String。 Html.RenderPartial调用内部Write并返回void

    基本用法是:

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

    在上面的代码片段中,两个调用都会产生相同的结果。

    虽然可以将Html.Partial的输出存储在变量中,或者将其从方法中返回,但不能使用Html.RenderPartial来完成此Html.RenderPartial 。 结果将在执行/评估过程中写入Response流。

    这也适用于Html.ActionHtml.RenderAction


    将@ Html.Partial视为复制到父页面的HTML代码。 将@ Html.RenderPartial想象成一个合并到父页面中的.ascx用户控件。 一个.ascx用户控件有更多的开销。

    '@ Html.Partial'返回一个html编码的字符串,与父级内联构建。 它访问父母的模型。

    '@ Html.RenderPartial'返回等同于.ascx用户控件。 它获取页面的ViewDataDictionary的副本,并且对RenderPartial的ViewData所做的更改不会影响父级的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.. )直接输出到响应。

    链接地址: http://www.djcxy.com/p/21189.html

    上一篇: Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction

    下一篇: Difference between InvariantCulture and Ordinal string comparison