我正在努力寻找一个看起来非常简单的概念。如果我的ViewBag中有一个值供我的_Layout.cshtml使用,我该如何以及在何处设置该值?
以下是我目前看到的最明显(对我而言)选项:
例如:
_Layout.cshtml
<!DOCTYPE html>
<html>
<head runat="server">
<title>@ViewBag.Title</title>
</head>
<body>
<div id="header">
<h1>Welcome @ViewBag.UserName</h2>
</div>
<div id="content">
@RenderBody()
</div>
</body>
</html>
如果每个控制器都设置UserName值,那就不是非常干。如果我用CodeIgniter之类的东西解决这个问题,我只需要创建自己的基本控制器来处理这些常见项目,并采用我的快乐方式。 ASP.NET MVC 3是否有更优选的选项?
答案 0 :(得分:10)
通用视图模型和基本控制器是IMO的方法。使用通用视图模型作为所有视图模型的基类。使用基本控制器中的OnActionExecuted方法获取视图模型(对于返回视图的操作)并将其强制转换为公共视图模型。此时设置公共属性。
答案 1 :(得分:0)
假设我希望ViewBag.PageHeight所有页面的默认值都为1000,但允许任何页面/视图覆盖它。这就是我在_Layout.cshtml中的内容:
页面高度为@(ViewBag.PageHeight ?? 1000)这似乎有效。