【问题标题】:MVC Razor RenderPage prevents downstream use of Html.RenderPartialMVC Razor RenderPage 防止下游使用 Html.RenderPartial
【发布时间】:2011-10-20 17:35:16
【问题描述】:

为了让我的大脑了解 RenderPage v. Html.Partial v. 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
bar

然而,Test2 从不渲染“foo”;就好像我打电话给@{ Html.RenderPartial("Foo"); } 永远不会发生。

我意识到这个例子是人为的 - 我不是在寻找解决问题的方法。我试图了解 RenderPage 和 Html.RenderPartial 是如何相关的,以及它们为什么会相互干扰。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    你可以查看this out

    正如安娜贝尔所说:

    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 模板查找,并接收确切的模板路径作为其参数

    【讨论】:

      猜你喜欢
      • 2014-02-21
      • 1970-01-01
      • 2012-06-24
      • 2011-10-22
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多