【问题标题】:What is the difference (if any) between Html.Partial(view, model) and Html.RenderPartial(view,model) in MVC2?MVC2 中的 Html.Partial(view, model) 和 Html.RenderPartial(view,model) 有什么区别(如果有的话)?
【发布时间】:2011-02-13 08:41:04
【问题描述】:

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

<% Html.RenderPartial(...); %>
<%= Html.Partial(...) %>  

如果它们不同,为什么要调用一个而不是另一个?
定义:

// 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);
    }
}

【问题讨论】:

    标签: asp.net asp.net-mvc-2


    【解决方案1】:

    唯一的区别是Partial返回一个MvcHtmlString,并且必须在&lt;%= %&gt;内部调用,而RenderPartial返回void并直接渲染到视图。

    如果您查看source code,您会发现它们都调用了相同的内部方法,传递了一个 StringWriter 供其渲染。

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

    【讨论】:

    • 好的,所以没有 :) 正如我所想,我猜我可以无缝地使用它们。谢谢:)
    • 不,区别在于返回类型,正如 SLaks 所说。这是不平凡的。性能方面,据称直接渲染到输出流更好(这就是为什么他们开始使用 void RenderPartial 的原因)。 Partial 在测试中最有用(imo),尽管正如 SLaks 所说,在生产代码中渲染输出之前,您可能希望在某些地方操作输出。他们只是很少见,imo。
    • Partial 在您想要在控制器中获取视图的输出时也很有帮助。这可用于使用视图来格式化电子邮件。
    • @Paul:我们所说的性能要提高多少?索赔是否有任何与之相关的测试或基准?看看这是否有实际意义,或者它是否只是一个微优化,将会很有趣。
    • 我的一个问题是:无论您使用哪个,两者最终都会被渲染到结果流中(因为在 Razor 中不仅仅是调用它发送到渲染视图的 TextWriter),如果他们两者都调用相同的内部方法,为什么一个比另一个性能更好?是因为它旋转了自己的内部缓冲区(会根据需要逐渐扩展)吗?我也很高兴其他人看到使用视图模型来呈现电子邮件;另一位开发人员认为我做得太过了,但它比你必须转义所有内容的字符串更干净、更容易操作。
    【解决方案2】:

    This is a great explanation by Dino Esposito:

    这两种方法之间的差异可能看起来很小且无害, 但如果你不知道如何处理它,它可能会咬你。钥匙 两种方法的区别在于:

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

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

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

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

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

    <body>
        @{ Html.RenderPartial("_Header"); }
        @Html.Partial("_Sidebar")
        <div class="container body-content">
           @RenderBody()
        </div>
        @{ Html.RenderPartial("_Footer"); }
    </body>
    

    在这种情况下,您决定在 RenderPartialPartial 不会改变最终效果。然而,由于 RenderPartial 稍微快一点,你可能更喜欢使用它。

    【讨论】:

    • -1 从其他来源复制时,至少要给予信任。这是来自 Pro ASP.NET MVC 3 框架(或至少是较新版本)的公然逐字复制。
    【解决方案3】:

    Html.PartialHtml.RenderPartial 是扩展方法是网页的可重用部分。 RenderPartial 的返回类型为 void,而 Partial 返回 MvcHtmlStringHtml.RenderAction 会将结果直接渲染到响应流(更高效、更快),而 Html.Action 会返回一个字符串(可以操作)和结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2012-11-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多