ASP.NET MVC教程:理解控制器、控制器行為和行為結果
原創上一篇:ASP.NET MVC教程:創建TaskList應用程序
【51CTO快譯】
理解控制器
MVC控制器負責處理對ASP.NET MVC網站的請求,每個瀏覽器請求都被映射到一個特殊的控制器上,例如,假設你在你的瀏覽器地址欄中輸入下面的URL:
http://localhost/Product/Index/3
這時會調用ProductController控制器,productController負責產生瀏覽器請求對應的響應,例如,控制器可能返回一個特定的視圖給瀏覽器,或控制器將用戶重定向到另一個控制器。
在你的ASP.NET MVC應用程序的控制器文件夾下創建一個新的控制器,在控制器文件夾上點右鍵,選擇“添加” > “新項目”,然后選擇MVC控制器類模板(如圖1所示),控制器名稱后綴必須包括Controller,例如,productController控制器。
圖1 創建新控制器
如果你創建的新控制器名叫productController,那么你的文件內容就如清單1所示。
清單1 productController.vb
Public Class ProductController Inherits System.Web.Mvc.Controller Function Index() ' Add action logic here Throw New NotImplementedException() End Function End Class |
正如你在清單1中所看到的,控制器就是一個類(Visual Basic .NET或c#類),控制器是一個衍生于System.Web.Mvc.Controller基礎類的類,因為控制器繼承了這個類,因此就繼承了多個有用的方法。
理解控制器行為
控制器暴露控制器行為,當你在你的瀏覽器地址欄中輸入一個特定的URL時就會調用一個控制器行為,例如,假設你輸入了下面的URL:
http://localhost/Product/Index/3
在這個例子中,調用了productController類的Index()方法,Index()方法是控制器行為的一個例子。
控制器行為必須是控制器類的一個公共方法,默認情況下,Visual Basic .NET函數是公共函數,這意味著默認情況下,任何添加到控制器類的函數都作為一個控制器行為暴露在外(你必須小心這一點,因為控制器行為可以被任何人調用)。
有幾個額外的需求必須滿足控制器行為,作為控制器行為的方法不能超載,而且,控制器行為不能是一個共享的方法,除此之外,你可以將任何方法當做控制器行為使用。
#p#
理解行為結果
控制器行為返回的事物叫做行為結果,一個行為結果就是控制器行為返回給瀏覽器請求的響應。
ASP.NET MVC框架支持六個標準類型的行為結果:
1.視圖結果(ViewResult):表示HTML和標記。
2.空結果(EmptyResult):表示沒有結果。
3.重定向結果(RedirectResult):表示重定向到一個新的URL。
4.重定向到路由結果(RedirectToRouteResult):表示重定向到一個新的控制器行為。
5.JsonResult:表示可以用于AJAX應用程序的JavaScript對象標記結果。
6.內容結果(ContentResult):表示一個文本結果。
這些行為結果都繼承自基礎行為結果(ActionResult)類。
大多數情況下,控制器行為返回視圖結果,例如,清單2中的Index控制器行為返回一個視圖結果。
清單2 BookController.vb
Public Class BookController Inherits System.Web.Mvc.Controller Function Index() Return View() End Function End Class |
當一個行為返回一個視圖結果時,返回給瀏覽器的就是HTML,清單2 中的Index()方法返回一個名叫Index.aspx視圖給瀏覽器。
注意清單2 中的Index()行為沒有返回ViewResult(),相反,控制器基礎類的View()方法被調用,正常情況下,你不用直接返回一個行為結果,相反,你可以調用下面的控制器基礎類方法:
1.View:返回一個ViewResult行為結果。
2.Redirect:返回一個RedirectResult行為結果。
3.RedirectToAction:返回一個RedirectToActionResult行為結果。
4.RedirectToRoute:返回一個RedirectToRouteResult行為結果。
5.Json:返回一個JsonResult行為結果。
6.Content:返回一個ContentResult行為結果。
因此,如果你想返回一個視圖(View)給瀏覽器,可以調用View()方法,如果你想將用戶重定向到另一個控制器,可以調用RedirectToAction() 方法,例如,清單3中的Details()行為要么顯示一個視圖,要么重定向到Index()行為,這依賴于Id參數是否有值。
清單3 CustomerController.vb
Public Class CustomerController Inherits System.Web.Mvc.Controller Function Details(ByVal Id As Integer?) If IsNothing(Id) Then Return RedirectToAction("Index") End If Return View() End Function Function Index() Return View() End Function End Class |
ContentResult行為結果是特殊的,你可以使用ContentResult行為結果返回一個明文行為結果,例如,清單4中的Index()方法返回一個明文消息而不是HTML。
清單4 StatusController.vb
Public Class StatusController Inherits System.Web.Mvc.Controller Function Index() Return Content("Hello World!") End Function End Class |
當StatusController.Index() 行為被調用時,不會返回一個視圖,相反,會返回一個原始文本“Hello World!”給瀏覽器。
如果控制器行為返回的結果不是一個行為結果,例如,一個日期或一個整數,那么ContentResult中的結果會自動換行,例如,清單5中的WorkController Index()行為被調用時,ContentResult會自動作為一個日期返回。
清單5 WorkController.vb
Public Class WorkController Inherits System.Web.Mvc.Controller Function Index() As DateTime Return DateTime.Now End Function End Class |
清單5中的Index()行為返回一個DateTime對象,ASP.NET MVC框架會將DateTime對象轉換成一個字符串,并且在ContentResult中的DateTime值會自動換行,瀏覽器接收日期和時間的明文。
小結
本文的目的是向你介紹ASP.NET MVC控制器、控制器行為和控制器行為結果的概念,在***小節中,你學習了如何添加新的控制器到一個ASP.NET MVC項目,接下來,你學習了控制器的公共方法是如何作為控制器行為暴露給所有人的,***,我們討論了控制器行為返回的不同類型的行為結果,特別是如何從控制器行為返回一個視圖結果、重定向到行為結果和內容結果。
原文:Understanding Controllers, Controller Actions, and Action Results
作者:Stephen Walther
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】
【編輯推薦】