2014-01-13 107 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

是的你是對的。請編輯您的答案,我會將其標記爲已接受。你應得的 –