剃刀:@ Html.Partial()vs @RenderPage()

Evg*_*nyt 93 asp.net-mvc renderpartial razor

渲染子模板的适当方法是什么?

有什么区别?两者似乎都适合我.

为什么@Html.RenderPartial()不再有效?

Ann*_*lle 127

Html.Partial("MyView")
Run Code Online (Sandbox Code Playgroud)

将"MyView"视图呈现为MvcHtmlString.它遵循视图查找的标准规则(即检查当前目录,然后检查Shared目录).

Html.RenderPartial("MyView")
Run Code Online (Sandbox Code Playgroud)

Html.Partial()除了将其输出直接写入响应流之外,是否相同.这样更有效,因为视图内容不会缓存在内存中.但是,因为该方法不返回任何输出,@Html.RenderPartial("MyView")将无法正常工作.你必须在代码块中包装调用:@{Html.RenderPartial("MyView");}.

RenderPage("MyView.cshtml")
Run Code Online (Sandbox Code Playgroud)

将指定的视图(由路径和文件名而不是视图名称标识)直接呈现给响应流,例如Html.RenderPartial().您可以通过将其作为第二个参数包含在视图中来提供您喜欢的任何模型

RenderPage("MyView.cshtml", MyModel)
Run Code Online (Sandbox Code Playgroud)

  • 是否有@ {Html.RenderPartial("MyView");}的效率提升指标超过@ Html.RenderPartial("MyView")? (8认同)
  • 小修正:RenderPage()中的第二个参数不是模型,它是通过PageData属性访问的param []对象.它似乎如上所述,因为默认情况下,"父"页面中的模型将传递给"子".https://msdn.microsoft.com/en-us/library/system.web.webpages.webpagebase.renderpage(v=vs.111).aspx (2认同)

Rya*_*son 17

我更喜欢

@RenderPage("_LayoutHeader.cshtml")
Run Code Online (Sandbox Code Playgroud)

过度

@{ Html.RenderPartial("_LayoutHeader"); }
Run Code Online (Sandbox Code Playgroud)

只是因为语法更容易,而且更具可读性.除此之外,似乎没有任何明显的功能差异.

编辑:RenderPartial的一个优点是您不必指定整个路径或文件扩展名,它将自动搜索公共位置.


Omi*_*ati 6

与大多数其他辅助方法一样,RenderPartial方法不返回HTML标记.相反,它将内容直接写入响应流,这就是为什么我们必须使用分号将其称为完整的C#系列.

这比从局部视图缓冲渲染的HTML稍微有效一些,因为无论如何它都将被写入响应流.如果您更喜欢更一致的语法,则可以使用Html.Partial方法,该方法与RenderPartial方法完全相同,但返回HTML片段并可用作@ Html.Partial("Product",p).