2014-01-13 109 views
0

在文件它说:OnResultExecuted()代码解释

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

谢谢!

回答

1

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

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

它会以下列方式执行:

OnActionExecuting.Home:Index 

    OnActionExecuting.Home:Suppliers 
    OnActionExecuted.Home:Suppliers 

    OnActionExecuting.Home:News 
    OnActionExecuted.Home:News 

OnActionExecuted.Home:Index 

所以误解是,供应商和新闻的操作实际上是在指数中呈现方法,并且直到在视图中定义的所有动作实际呈现它们自己之前,索引方法都没有“执行”。

+0

你的冥想似乎离我很近。但是当我试图在OnResultExecuted()内部进行一些代码工作时,会出现一些奇怪的现象。在索引渲染到结束之前,它已被称为供应商方法。 –

+1

我会想象它被调用的顺序:供应商,新闻,然后索引...是不是发生? – Martin

+0

是的你是对的。请编辑您的答案,我会将其标记为已接受。你应得的 –