2011-12-17 43 views
1

以外的視圖在ASP.NET MVC 3,假設我們有以下控制措施:是否有任何其他基類,它看起來比System.Web.Mvc.ViewResultBase

public ActionResult Index() { 

    ViewBag.Message = "Foo Bar"; 
    return View(); 
} 

這裏,Index方法返回ViewResult實例System.Web.Mvc.ViewResultBase類。由於我們返回ViewResult類的實例,因此係統會嘗試查找適當的視圖文件以生成輸出。如果找不到它,它會拋出一個異常。

我的問題是這樣的:

有它看起來比其他System.Web.Mvc.ViewResultBase一個視圖中的任何其他基類?

用簡單的英語,我們是否必須從控制器操作返回一個實現System.Web.Mvc.ViewResultBase類的類,以便使結果具有視圖?

編輯

而且,你在這裏看到我告訴我會返回一個類型的ActionResult這是基礎,基礎類可以這麼說。當您查看結尾時,我將返回ViewResult的實例。

框架如何處理?它是否試圖將每個控制器的動作結果投入到ViewResultBase課程中?我特別好奇這部分。

回答

1

ControllerActionInvoker類負責執行控制器操作。找到並執行它查找動作返回類型的操作後:

  1. 如果返回類型爲void然後它會創建一個EmptyResult
  2. 如果返回類型什麼,但ActionResult然後將其轉換返回值的字符串並用該字符串創建一個ContentResult

所以最後一個動作的結果總是ActionResult類的一個實例,它聲明瞭以下方法:

public abstract void ExecuteResult(ControllerContext context); 

然後ControllerActionInvoker基本上調用此ExecuteResult方法來允許ActionResultReponse。在ViewResultBase的情況下,視圖呈現正在發生。
要回答你在MVC3中的拳頭問題,只有ViewResultBase類的descandants渲染視圖。

+0

感謝您的詳細回覆。你能看到我對這個問題的編輯嗎?我對這部分也很好奇。 – tugberk 2011-12-17 21:30:52

+1

不,它不會轉換控制器的操作返回值,只是調用它的'ExecuteResult'方法。在ViewResultBase實現中呈現視圖並將其寫入響應。 – nemesv 2011-12-17 22:25:26

+0

Oww,所以'ViewResultBase'類通常會根據自己的需要重寫'ActionResult.ExecuteResult'方法,對吧? – tugberk 2011-12-18 00:14:22

相關問題