ASP.NET MVC: ActionFilterAttribute не устанавливает ViewData - PullRequest
1 голос
/ 29 декабря 2010

Я написал следующий ActionFilterAttribute

Imports System.Web.Mvc

Namespace Mvc.Filters
    Public Class StopWatchFilter : Inherits ActionFilterAttribute
        Private tStart As DateTime
        Private tStop As DateTime

        Public Overrides Sub OnActionExecuting( _
            ByVal filterContext As ActionExecutingContext)

            tStart = DateTime.Now

        End Sub

        Public Overrides Sub OnResultExecuted( _
            ByVal filterContext As ResultExecutedContext)

            tStop = DateTime.Now
            filterContext.Controller.ViewData("StopWatch") = _
                ((tStop - tStart).TotalMilliseconds / 1000).ToString(".00")
        End Sub
    End Class
End Namespace

Я установил свой контроллер

''# Fixes SO code coloring
<MyApp.StopWatch()>
Function Index() As ActionResult
    Return View()
End Function

Но затем, когда я пытаюсь отобразить ViewData("StopWatch") в моем представлении, оно просто пустое.

Я скучаю по чему-то глупому?

EDIT:

Похоже, что я могу установить ViewData в OnActinExecuting, но не в OnResultExecuted.

Итак, с какой стати я могу построить секундомер ActionFilter?

1 Ответ

2 голосов
/ 29 декабря 2010

Хорошо, понял.

OnActionExecuted позволяет мне по-прежнему записывать результаты в представление, поскольку результаты еще не были выполнены (где OnResultExecuted уже выполнило результаты для представления)!

Imports System.Web.Mvc

Namespace Mvc.Filters
    Public Class StopWatchFilter : Inherits ActionFilterAttribute
        Private tStart As DateTime
        Private tStop As DateTime

        Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
            tStart = DateTime.Now
        End Sub

        Public Overrides Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext)
            tStop = DateTime.Now
            filterContext.Controller.ViewData("StopWatch") = ((tStop - tStart).TotalMilliseconds / 1000).ToString(".00")
        End Sub
    End Class
End Namespace

Обычно, если вы присоединяете вышеуказанный атрибут к какому-либо действию и используете ViewData("StopWatch") в своем представлении.Вы можете видеть, сколько времени потребовалось для выполнения действия контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...