2009-02-09 54 views
3

哪个方法View()在System.Web.Mvc.Controller中最后被调用?或者我应该重写每一个?我想在我的BaseController中设置一些视图数据,它从System.Web.Mvc.Controller继承。在ASP.NET MVC控制器中重写哪个View()?

编辑: 我想用来存储像IsLoggedIn和BasicUserDetails用户的基本信息{PermissionLevel,用户名,EmailAddress的,用户ID}

这是设置它的地方吗?

回答

3

有两种不同的实现(在RC 1):

protected internal virtual ViewResult View(string viewName, string masterName, object model) { 

    protected internal virtual ViewResult View(IView view, object model) { 

所有的人打电话给这两间。但是,我不会认为这会永远保持这种方式。我将不得不想象,该框架的未来版本可能会改变这一点。

更新:存储用户信息,use ASP.NET membership。它已经告诉你用户是否登录 - Request.IsAuthenticated。您可以使用普通的会员功能存储自定义权限。电子邮件属性等已经被支持。当然,认证提供商是可插拔的,所以你可以使用任何你想要的一种认证方式 - 的Windows,域的OpenID等

更新2:还要注意的是ControllerBase有一个虚拟的初始化方法,你可以重写以后在各种行动中设置你将需要的东西。

+0

谢谢!这将帮助我很多! – 2009-02-09 22:13:57

8

你可能想重写控制器上的“过滤器”方法之一。有四个这样的方法:

  • OnActionExecuting - 之后的动作一直 执行
  • OnResultExecuting发生 - - 之前执行的 行动
  • OnActionExecuted发生由 操作返回的ActionResult之前发生 被执行
  • OnResultExecuted - 由操作 返回的ActionResult发生后

这是一个更好的方式来增加共同所有的动作功能,因为它是官方支持并不太可能改变