【问题标题】:ASP.NET MVC Base Controller Function not firing when I need it toASP.NET MVC 基本控制器功能在我需要时未触发
【发布时间】:2010-06-28 03:59:07
【问题描述】:

我注意到一些我不喜欢的行为,我想知道这是否正常。

我有一个继承自 Mvc.Controller 的 BaseController,我有一个内部的 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

这是放置会话状态“东西”的正确位置吗?

【问题讨论】:

    标签: asp.net-mvc actionresult


    【解决方案1】:

    我将在我的编辑中使用解决方案将此标记为答案

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2011-07-12
      • 1970-01-01
      • 2019-06-27
      相关资源
      最近更新 更多