【发布时间】:2010-12-29 18:26:02
【问题描述】:
我写了下面的 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") 时,它只是空白。
我在这里错过了一些愚蠢的东西吗?
编辑:
似乎我可以在OnActinExecuting 中设置ViewData,但在OnResultExecuted 中不能。
那么,我到底如何才能制作秒表ActionFilter?
【问题讨论】:
-
你想做什么?将请求的总执行时间写入响应?如果是这样,那么您就处于 catch-22 状态,因为在请求完成处理之前您不会知道执行时间,但在那个时候,响应已经被确定/写入。如果您密切关注 MVC(视图中的逻辑很少甚至没有逻辑),那么对操作进行计时将使您非常接近您正在寻找的内容。
标签: asp.net-mvc vb.net viewdata actionfilterattribute