MVC2中的Html.Partial(视图,模型)和Html.RenderPartial(视图,模型)之间有什么区别(如果有的话)?

Sté*_*ane 140 asp.net asp.net-mvc-2

除了它返回的类型以及你当然以不同方式调用它的事实

<% Html.RenderPartial(...); %>
<%= Html.Partial(...) %>  
Run Code Online (Sandbox Code Playgroud)

如果它们不同,你为什么要打电话给一个而不是另一个?
定义:

// Type: System.Web.Mvc.Html.RenderPartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class RenderPartialExtensions
    {
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName);
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, ViewDataDictionary viewData);
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model);

        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model,
                                     ViewDataDictionary viewData);
    }
}

// Type: System.Web.Mvc.Html.PartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class PartialExtensions
    {
        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName,
                                        ViewDataDictionary viewData);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model,
                                        ViewDataDictionary viewData);
    }
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 167

唯一的区别是Partial返回an MvcHtmlString,并且必须在内部调用<%= %>,而RenderPartial返回void并直接呈现给视图.

如果查看源代码,您会看到它们都调用相同的内部方法,并传递StringWriter以进行渲染.

Partial如果要查看,保存或操作生成的HTML而不是将其写入页面,则可以调用.

  • 当您想要在控制器中获取视图的输出时,部分也很有用.这可用于使用视图格式化电子邮件. (41认同)
  • 不,差异是返回类型,正如SLaks所说.这不重要.在性能方面,据称直接渲染输出流更好(这就是为什么他们开始使用void RenderPartial).Partial在测试中大部分都是有用的(imo),尽管SLaks表示在生产代码中渲染输出之前可能有一些地方需要操作输出.他们只是罕见的,imo. (40认同)
  • @Paul:我们在说什么?索赔是否有与之相关的任何测试或基准?有趣的是,这是否真正有用,或者仅仅是微优化。 (2认同)

Ste*_*pUp 5

Dino Esposito 给出了很好的解释:

\n\n
\n

这两种方法之间的差异可能看起来很小并且无害,但如果您不知道如何处理它,它可能会困扰您。两种方法之间的主要区别是:

\n\n
    \n
  • Partial 返回 HTML 编码的字符串
  • \n
  • RenderPartial直接写入响应输出流的 void 方法。
  • \n
\n\n

两种方法的用法略有不同:

\n\n
@Html.Partial("_yourPartialView")\n@{ Html.RenderPartial("_yourPartialView "); }\n
Run Code Online (Sandbox Code Playgroud)\n\n

选择使用哪个取决于您的要求。如果您需要进一步操作响应流中注入的字符串,您应该使用Partial; 否则使用RenderPartial\n ,这只是因为它直接进入流,\n 比 快一点Partial

\n\n

最后,部分视图的用例属于两个阵营。第一种情况是通过将各种独立的标记组合在一起来创建视图,如下所示。

\n\n
<body>\n    @{ Html.RenderPartial("_Header"); }\n    @Html.Partial("_Sidebar")\n    <div class="container body-content">\n       @RenderBody()\n    </div>\n    @{ Html.RenderPartial("_Footer"); }\n</body>\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这种情况下,您在RenderPartialor\n 之间进行选择的决定Partial不会\xe2\x80\x99 改变最终效果。但是,由于 \n RenderPartial速度稍快,您可能更喜欢使用它。

\n
\n

  • -1 从其他来源复制时,至少注明出处。这是来自 Pro ASP.NET MVC 3 Framework(或至少是较新版本)的公然逐字复制。 (4认同)