ASP.NET MVC控制器中要覆盖哪个View()?

时间:2009-02-09 22:01:15

标签: asp.net-mvc

在System.Web.Mvc.Controller中最后调用哪个方法View()?或者我应该覆盖每一个?我想在我的BaseController中设置一些视图数据,它继承自System.Web.Mvc.Controller。

修改 我想存储基本用户信息,如IsLoggedIn和BasicUserDetails {PermissionLevel,UserName,EmailAddress,UserId}

这是设置它的地方吗?

2 个答案:

答案 0 :(得分:8)

您可能希望覆盖控制器上的某个“过滤器”方法。有四种这样的方法:

  • OnActionExecuting - 在之前发生 行动已执行
  • OnActionExecuted - 在动作发生后发生 执行
  • OnResultExecuting - 发生 在ActionResult返回之前 行动已执行
  • OnResultExecuted - 在。之后发生 Action返回ActionResult 已被执行

这是添加所有操作通用功能的更好方法,因为它得到官方支持且不太可能更改

答案 1 :(得分: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。您可以使用普通的Membership功能存储自定义权限。已经支持电子邮件属性等。当然,身份验证提供程序是可插入的,因此您可以使用任何类型的身份验证 - Windows,域,OpenID等。

更新2 :另请注意,ControllerBase有一个虚拟的Initialize方法,您可以覆盖该方法以设置稍后在各种操作中需要的内容。