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

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

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

为什么@Html.RenderPartial()不再工作?

 Html.Partial("MyView") 

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

 Html.RenderPartial("MyView") 

Html.Partial()相同,只是将其输出直接写入响应stream。 这是更高效的,因为视图内容不被缓冲在内存中。 但是,因为该方法不会返回任何输出,所以@Html.RenderPartial("MyView")将不起作用。 您必须将该调用包装在代码块中: @{Html.RenderPartial("MyView");}

 RenderPage("MyView.cshtml") 

将指定的视图(通过path和文件名称而不是视图名称)直接呈现给响应stream,如Html.RenderPartial() 。 您可以将任何您喜欢的模型作为第二个参数提供给视图

 RenderPage("MyView.cshtml", MyModel) 

我更喜欢

 @RenderPage("_LayoutHeader.cshtml") 

过度

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

只是因为语法更简单,而且更具可读性。 除此之外,似乎没有任何区别function明智。

编辑:RenderPartial的一个优点是你不必指定整个path或文件扩展名,它将自动search常见的地方。

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

这比缓冲部分视图中呈现的HTML稍微有效,因为它将被写入响应stream。 如果您更喜欢更一致的语法,则可以使用Html.Partial方法,该方法与RenderPartial方法完全相同,但返回HTML片段,可用作@ Html.Partial(“Product”,p)。

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