bev*_*qua 21 asp.net asp.net-mvc asp.net-mvc-3
我正在创建一个自定义ActionFilterAttribute,以便在ajax请求期间将ViewResults和重定向转换为JsonResults.我通过单元测试将大部分内容连接起来,我出于某种原因假设我的转换必须发生OnResultExecuting,我意识到情况并非如此,并且正确的覆盖方法是OnActionExecuted,一旦操作方法被调用返回结果.
我的问题是,当正好是OnResultExecuted和OnResultExecuting被调用,因为我已经在所有四个覆盖,只有在那些断点OnActionExecuting,并OnActionExecuted在所有射击.
Dar*_*rov 15
让我们采用以下示例执行您描述的转换:
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var result = filterContext.Result as ViewResultBase;
if (result != null && result.Model != null)
{
filterContext.Result = new JsonResult
{
Data = result.Model,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
}
}
Run Code Online (Sandbox Code Playgroud)
该OnResultExecuting方法将在动作结果的ExecuteResult方法运行之前立即调用,紧接着之后的方法OnResultExecuted.
在寻找一段时间并试图理解接受的答案后,我发现了这一点.我相信这显示了执行的顺序
| 归档时间: |
|
| 查看次数: |
13878 次 |
| 最近记录: |