【问题标题】:OnResultExecuted() Code explainOnResultExecuted() 代码说明
【发布时间】:2014-01-13 11:25:17
【问题描述】:

在文档中说:

OnResultExecuted() - 在执行动作方法返回的动作结果后调用。

我不明白“执行操作结果之后”是什么意思。这是一个例子:

public class HomeController:BaseController {

//....
public ActionResult Index()
{
    var user = _repository.GetAllUsers();
    return View(@"~/Views/Home/Index.cshtml", user);
}

public ActionResult Suppliers()
{
     var suppliers = _repository.GetAllSuppliers();
     return PartialView(@"~/Views/Home/_Suppliers.cshtml",suppliers)
}

public ActionResult News()
{
     var news = _repository.GetAllNews();
     return PartialView(@"~/Views/Home/_News.cshtml",news)
}
// Other

Index.cshtml 视图

@model IList<User>;
@{
   Layout=null;
 }

@Model.FirstOrDefault(x => x.Name=="Mike")
</br>
@Html.Action("Suppliers","Home")  //action renders a simple partial no extra calls
</br>
@Html.Action("News","Home") //action renders a simple partial no extra calls

问题:

此时将调用OnResultExecuted(),假设它位于BaseController内?

谢谢!

【问题讨论】:

    标签: asp.net-mvc-3 events controller action-filter


    【解决方案1】:

    我的理解是它是在视图被渲染之后调用的......所以基本上,你不能改变任何已经在视图中执行的东西。

    所以它更适合记录类型的活动......

    它将以下列方式执行:

    OnActionExecuting.Home:Index
    
      OnActionExecuting.Home:Suppliers
      OnActionExecuted.Home:Suppliers
    
      OnActionExecuting.Home:News
      OnActionExecuted.Home:News
    
    OnActionExecuted.Home:Index
    

    所以误解是,Suppliers 和 News 动作实际上是在 Index 方法中呈现的,而 Index 方法直到 View 中定义的所有 Action 都真正自己呈现后才“执行”。

    【讨论】:

    • 你的冥想似乎和我的很接近。但是当我试图在 OnResultExecuted() 中依赖假定的行为做一些代码工作时,会发生一些奇怪的事情。在索引渲染到最后之前,它已被供应商方法调用。
    • 我想它是按顺序调用的:供应商,新闻,然后是索引......这不会发生吗?
    • 是的,你是对的。请编辑您的答案,我会将其标记为已接受。你活该
    猜你喜欢
    • 2012-06-25
    • 2013-09-12
    • 2017-01-23
    • 2014-09-21
    • 2016-06-01
    • 2015-01-13
    • 2015-08-16
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多