ASP.NET MVC持久数据和代码组织

3Da*_*ave 1 cookies asp.net-mvc session post

我正在给MVC另一个镜头,我觉得我正在重新学习HTML格式.

所以,愚蠢的问题:在我的母版页的顶部,我有一个局部视图(或类似的 - 我正在使用字符串模板视图引擎,到目前为止我喜欢它),它显示一个小的登录表单(类似于NewEgg有什么),或者像是一样的消息

您已登录为(姓名).[简介] | [登出]

不幸的是,我有一个大脑抽筋,无法确定将数据(用户名,id)放入ViewData集合的最佳方法,而无需在每个控制器方法中明确指定它,如

public ActionResult Index()
{
    ViewData["IsAuthenticated"] = Session["IsAuthenticated"];
    ViewData["user.firstname"] = User.FirstName;
    return View("login");
}
Run Code Online (Sandbox Code Playgroud)

不得不在整个地方进行复制,这非常烦人.我的下一个选择是创建一个名为PopulateCommonViewData()的方法,并从每个操作方法中调用它,但这似乎也很糟糕.

我在这里错过了什么吗?

tva*_*son 5

从基本控制器派生控制器.然后将创建公共视图数据的方法移动到该基本控制器中的OnActionExecuting/OnActionExecuted覆盖.

 public class BaseController : Controller
 {
      public override void OnActionExecuting( ActionExecutingContext filterContext )
      {
           ViewData["IsAuthenticated"] = Request.IsAuthenticated;
           ViewData["user.firstname"] = User.FirstName;
      }
 }

 public class MyController : BaseController // and you're done
 {
    ...
 }
Run Code Online (Sandbox Code Playgroud)