2010-06-28 56 views
0

我注意到一些我不喜欢的行为,我想知道这是否正常。当我需要它时,ASP.NET MVC基础控制器函数不会触发

我有一个BaseController继承自Mvc.Controller,并且里面有一个View函数可以在每一页加载时触发。

Protected Overrides Function View(ByVal viewName As String, ByVal masterName As String, ByVal model As Object) As System.Web.Mvc.ViewResult 


    If Session("UserInfo") Is Nothing AndAlso User.Identity.IsAuthenticated Then 
     Try 
      ActivityMonitorService.AddActivity(UserService.GetUserByOpenID(HttpContext.User.Identity.Name).ID, _ 
               Utilities.ActivityMonitor.Log.SessionStarted, _ 
               Utilities.DataConverters.IPAddressToNumber(HttpContext.Request.UserHostAddress)) 
      ActivityMonitorService.SubmitChanges() 
     Catch : End Try 
     Session("UserInfo") = UserService.GetUserByOpenID(HttpContext.User.Identity.Name) 
    End If 

End Function 

我的问题是,如果会话状态是关闭的,我对这个函数得到一个对象引用错误

Function Edit(ByVal id As Integer) As ActionResult 
    If DirectCast(Session("UserInfo"), Domain.User).ID = id Then 

     Dim user As Domain.User = UserService.GetUserByID(id) 
     Return View(user) 

    Else 
     Response.StatusCode = CInt(HttpStatusCode.NotFound) 
     Return RedirectToAction("NotFound", "Error") 
    End If 
End Function 

现在我假定这是因为基函数View实际上是发射在Return View(user)。如果这是真的,我将如何将它连接起来,以便打电话给ActionResult打电话?

编辑:

它似乎如果我把代码在这里

Protected Overrides Function CreateActionInvoker() As System.Web.Mvc.IActionInvoker 
    If Session("UserInfo") Is Nothing AndAlso User.Identity.IsAuthenticated Then 
     Try 
      ActivityMonitorService.AddActivity(UserService.GetUserByOpenID(HttpContext.User.Identity.Name).ID, _ 
               Utilities.ActivityMonitor.Log.SessionStarted, _ 
               Utilities.DataConverters.IPAddressToNumber(HttpContext.Request.UserHostAddress)) 
      ActivityMonitorService.SubmitChanges() 
     Catch : End Try 
     Session("UserInfo") = UserService.GetUserByOpenID(HttpContext.User.Identity.Name) 
    End If 
    Return MyBase.CreateActionInvoker() 
End Function 

这是把会话状态的“东西”在正确的地方但是工作?

回答

0

我会在我的编辑解决方案,以纪念这个作为回答

Protected Overrides Function CreateActionInvoker() As System.Web.Mvc.IActionInvoker 
    If Session("UserInfo") Is Nothing AndAlso User.Identity.IsAuthenticated Then 
     Try 
      ActivityMonitorService.AddActivity(UserService.GetUserByOpenID(HttpContext.User.Identity.Name).ID, _ 
               Utilities.ActivityMonitor.Log.SessionStarted, _ 
               Utilities.DataConverters.IPAddressToNumber(HttpContext.Request.UserHostAddress)) 
      ActivityMonitorService.SubmitChanges() 
     Catch : End Try 
     Session("UserInfo") = UserService.GetUserByOpenID(HttpContext.User.Identity.Name) 
    End If 
    Return MyBase.CreateActionInvoker() 
End Function 
相关问题