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


Answers:


127
Html.Partial("MyView")

将“ MyView”视图呈现到MvcHtmlString。它遵循用于视图查找的标准规则(即检查当前目录,然后检查Shared目录)。

Html.RenderPartial("MyView")

与相同Html.Partial(),只是将其输出直接写到响应流。这是更有效的,因为视图内容未在内存中缓冲。但是,由于该方法不返回任何输出,因此@Html.RenderPartial("MyView")将无法工作。您必须将调用包装在代码块中:@{Html.RenderPartial("MyView");}

RenderPage("MyView.cshtml")

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

RenderPage("MyView.cshtml", MyModel)

8
是否有@@ Html.RenderPartial(“ MyView”);}相对@ Html.RenderPartial(“ MyView”)的效率提高指标?
浮士德节

@Faust是指Partial vd RenderPartial吗?
Cacho Santa

1
@cacho:是的,我的评论应为@Html.Partial("MyView")vs@{Html.RenderPartial("MyView");}
浮士德

2
较小的修正:RenderPage()中的第二个参数不是模型,而是一个param []对象,可以通过PageData属性访问该对象。它似乎可以如上所述工作,因为默认情况下,“父”页面中的模型将传递给“子”。msdn.microsoft.com/en-us/library/...
乔恩·

有没有一种方法可以通过调用将整个页面嵌套在其模型中RenderPage?我想通过指定特定的查询参数来嵌套另一个页面,该参数反过来将过滤该页面中的数据,此外,还要删除其自己的布局。
Shimmy Weitzhandler,

17

我更喜欢

@RenderPage("_LayoutHeader.cshtml")

过度

@{ Html.RenderPartial("_LayoutHeader"); }

仅因为语法更容易且可读性更高。除此之外,在功能上似乎没有任何区别。

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


1
我认为这应该是评论而不是答案。RenderPage由于语法我也同意。
Iman Mahmoudinasab

6

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

这比从局部视图缓冲呈现的HTML效率更高,因为无论如何它将被写入响应流。如果您希望使用更一致的语法,则可以使用Html.Partial方法,该方法与RenderPartial方法完全相同,但是返回HTML片段,可以用作@ Html.Partial(“ Product”,p)。


2

我们还可以使用局部视图传递模型。@ Html.Partial(“ MyView”,“ MyModel”);


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.