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

时间:2010-12-21 16:49:10

标签: asp.net-mvc razor renderpartial

呈现子模板的适当方法是什么?

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

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

5 个答案:

答案 0 :(得分:125)

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)

答案 1 :(得分:16)

我更喜欢

@RenderPage("_LayoutHeader.cshtml")

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

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

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

答案 2 :(得分:6)

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

@RenderPages() 

以上在ASP.NET MVC中不起作用。它只适用于WebPages。

@Html.Partial("_Footer")

您需要在ASP.NET MVC中使用上述内容。