在试图让我的大脑围绕RenderPage诉Html.Partial诉Html.RenderPartial案的时候,我一直在玩一些测试文件。我遇到了一些奇怪的行为:一旦调用了RenderPage(),随后对Html.RenderPartial()的所有调用似乎都变成了空操作。为什么一个要阻止另一个呢?
Foo.cshtml:
<div>foo</div>Bar.cshtml:
<div>bar</div>Test1.cshtml:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
@{ Html.RenderPartial("Foo"); }
@RenderPage("Bar.cshtml")
</body>
</html>Test2.cshtml:
// Test2.cshtml is identical to Test1.cshtml, except the two lines below
// ...
<body>
@RenderPage("Bar.cshtml") // this line used to be second
@{ Html.RenderPartial("Foo"); } // this line used to be first
</body>Test1的行为完全符合您的预期:
foo
条形
但是,Test2从不呈现"foo";就好像我对@{ Html.RenderPartial("Foo");}的调用从未发生过。
我意识到这个例子是人为的--我不是在寻找解决问题的方法。我试图理解RenderPage和Html.RenderPartial是如何联系在一起的,以及它们为什么会相互干扰。
发布于 2012-08-16 12:42:23
您可以查看this
正如Annabelle所提到的:
Html.Partial("MyView")将"MyView“视图呈现给MvcHtmlString。它遵循视图查找的标准规则(即检查当前目录,然后检查共享目录)。
Html.RenderPartial("MyView")除了将其输出直接写入响应流之外,它的作用与Html.Partial()相同。这样效率更高,因为视图内容不会在内存中进行缓冲。但是,因为该方法不返回任何输出,所以@Html.RenderPartial("MyView")将不起作用。您必须将调用包装在代码块中:@{Html.RenderPartial("MyView");}。
RenderPage("MyView.cshtml")将指定的视图(由路径和文件名而不是视图名称标识)直接呈现给响应流,如Html.RenderPartial()。但是,它似乎总是使用当前视图的模型作为"MyView.cshtml“的模型。
另外,通过查看here,您可以发现: WebPageBase的@RenderPage方法没有使用MVC模板查找,而是接收确切的模板路径作为其参数
https://stackoverflow.com/questions/7839870
复制相似问题