1

私は次の 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")、ビューに表示しようとすると、空白になります。

私はここで愚かな何かを見逃していますか?

編集:

に を設定できますが、ViewDataには設定できないようです。OnActinExecutingOnResultExecuted

では、いったいどうすればストップウォッチを作ることができるのActionFilterでしょうか?

4

1 に答える 1

2

はい、わかった。

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")し、ビューで使用する場合。コントローラ アクションの実行にかかった時間を確認できます。

于 2010-12-29T18:48:24.480 に答える