gpt4 book ai didi

asp.net-mvc - MVC Razor RenderPage 阻止下游使用 Html.RenderPartial

转载 作者:行者123 更新时间:2023-12-04 20:03:17 25 4
gpt4 key购买 nike

在尝试让我的大脑围绕 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 是如何相关的,以及为什么它们会相互干扰。

最佳答案

可以查看this

正如安娜贝尔所说:

Html.Partial("MyView")

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

Html.RenderPartial("MyView")

与 Html.Partial() 相同,只是它将其输出直接写入响应流。这样效率更高,因为 View 内容没有缓冲在内存中。但是,由于该方法不返回任何输出,@Html.RenderPartial("MyView") 将不起作用。您必须将调用包装在代码块中:@{Html.RenderPartial("MyView");}。

RenderPage("MyView.cshtml")

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

同时查看 here你会发现:WebPageBase 的@RenderPage 方法不使用 MVC 模板查找并接收准确的模板路径作为其参数

关于asp.net-mvc - MVC Razor RenderPage 阻止下游使用 Html.RenderPartial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com