渲染子模板的适当方法是什么?
有什么区别?两者似乎都对我有用。
为什么@Html.RenderPartial()
不再工作?
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)
我更喜欢
@RenderPage("_LayoutHeader.cshtml")
超过
@{ Html.RenderPartial("_LayoutHeader"); }
只是因为语法更简单,更易读。除此之外,在功能方面似乎没有任何差异。
编辑: RenderPartial 的一个优点是您不必指定整个路径或文件扩展名,它将自动搜索公共位置。
RenderPartial方法不像大多数其他辅助方法那样返回 HTML 标记。相反,它将内容直接写入响应流,这就是为什么我们必须将其称为完整的 C# 行,使用分号。
这比从局部视图缓冲渲染的 HTML 稍微高效一些,因为无论如何它都会写入响应流。如果您喜欢更一致的语法,可以使用Html.Partial方法,该方法与RenderPartial方法完全相同,但返回一个 HTML 片段,可以用作 @Html.Partial("Product", p)。
我们也可以使用局部视图传递模型。@Html.Partial("MyView","MyModel");
@RenderPages()
以上不适用于 ASP.NET MVC。它仅适用于网页。
@Html.Partial("_Footer")
您将需要在 ASP.NET MVC 中使用上述内容。