【发布时间】:2011-06-25 19:59:06
【问题描述】:
我正在使用带有 Razor 视图引擎的 MVC 3。我想在部分视图内的 ViewBag 中设置一些值,并希望在我的 _Layout.cshtml 中检索这些值。例如,当您设置默认的 ASP.NET MVC 3 项目时,您会在“/Views/Shared”文件夹中获得一个 _Layout.cshtml 文件。在那个 _Layout.cshtml 中,页面标题设置如下:
<title>@ViewBag.PageTitle</title>
然后在“/Views/Home/About.cshtml”视图中修改ViewBag的内容:
@{
ViewBag.Title = "About Us";
}
这很好用。当“关于”视图呈现时,页面标题为“关于我们”。所以,现在我想在 About 视图中呈现 Partial 视图,并且我想在 Partial 视图中修改 ViewBag.Title。 ("/Views/Shared/SomePartial.cshtml")
@Html.Partial("SomePartial")
在这个部分视图中我有这个代码:
@{
ViewBag.Title = "About Us From The Partial View";
}
当我调试此代码时,我看到 ViewBag.Title 设置为“关于我们”,然后在部分视图中我看到它被重置为“从部分视图中了解我们”,但是当代码到达 _Layout 时。 cshtml 它可以追溯到“关于我们”。
这是否意味着如果在 Partial 视图中修改 ViewBag 的内容,这些更改将不会出现(可访问)在主视图 (About.cshtml) 或 _Layout.cshtml 中?
提前致谢!
【问题讨论】:
-
请参阅此解决方案以获取按请求单例作为上述方案的替代方案,该方案非常有效:stackoverflow.com/questions/194999/…
-
不是 100% 肯定,但我猜你不能更改 ViewBag 变量,因为基于 .Net 中的 MVC 模型,部分更像是更小的、可重用的组件,而不是完整的视图。视图可以使用部分组件将这些组件添加(渲染)到它们自己,但不能反过来。视图还可以将 ViewModels 传递给局部视图,以向它们提供需要渲染的数据。我知道这不是很有建设性,但我的直觉是,如果您尝试从部分更改 ViewBag 变量,那么您可能做错了什么。
标签: view asp.net-mvc-3 razor partial viewbag