首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC Razor RenderPage阻止Html.RenderPartial的下游使用

MVC Razor RenderPage阻止Html.RenderPartial的下游使用
EN

Stack Overflow用户
提问于 2011-10-21 01:35:16
回答 1查看 1.6K关注 0票数 3

在试图让我的大脑围绕RenderPage诉Html.Partial诉Html.RenderPartial案的时候,我一直在玩一些测试文件。我遇到了一些奇怪的行为:一旦调用了RenderPage(),随后对Html.RenderPartial()的所有调用似乎都变成了空操作。为什么一个要阻止另一个呢?

Foo.cshtml:

代码语言:javascript
复制
<div>foo</div>

Bar.cshtml:

代码语言:javascript
复制
<div>bar</div>

Test1.cshtml:

代码语言:javascript
复制
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>
<body>
  @{ Html.RenderPartial("Foo"); }
  @RenderPage("Bar.cshtml")
</body>
</html>

Test2.cshtml:

代码语言:javascript
复制
// 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是如何联系在一起的,以及它们为什么会相互干扰。

EN

回答 1

Stack Overflow用户

发布于 2012-08-16 12:42:23

您可以查看this

正如Annabelle所提到的:

代码语言:javascript
复制
Html.Partial("MyView")

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

代码语言:javascript
复制
Html.RenderPartial("MyView")

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

代码语言:javascript
复制
RenderPage("MyView.cshtml")

将指定的视图(由路径和文件名而不是视图名称标识)直接呈现给响应流,如Html.RenderPartial()。但是,它似乎总是使用当前视图的模型作为"MyView.cshtml“的模型。

另外,通过查看here,您可以发现: WebPageBase的@RenderPage方法没有使用MVC模板查找,而是接收确切的模板路径作为其参数

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7839870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档