我正在努力处理看起来很简单的概念。如果我的ViewBag中有一个值供我的_Layout.cshtml使用,我该如何以及在哪里设置该值?用于处理ASP.NET MVC 3视图中的常见数据的方法
这里是最明显的(对我)的选择,因为我现在所看到:
- 在每个控制器(未干)
- 创建我自己的控制器基地控制器继承并设置里设置的值在基类
- 在Global.asax.cs中设置的值的值(感觉脏)
- 创建一个ActionFilter设置数据和全局寄存器的过滤器(也认为是错误的)
- 设置在值_ViewStart.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>
如果每个控制器设置用户名值,这不是可怕干。如果我用CodeIgniter这样的东西来解决这个问题,我只需要创建自己的基础控制器来处理这些常见的项目,并开始我的快乐之旅。 ASP.NET MVC 3有更好的选择吗?
实际上,在这种特殊情况下 - 即时猜测“用户名”实际上来自会话/表单身份验证票证。所以你可能想要使用一个HTML帮助器,它使用FormsAuth代码来抓取用户名,然后渲染出一个MvcHtmlString - 只是一个想法... – RPM1984 2011-02-01 21:01:35
嗯......好点。也许@ ViewBag.UserName不是最好的例子。不过,我现在更关心的是更大的局面。 – Greg 2011-02-01 22:59:11