1. 程式人生 > 其它 >ASP.NET MVC學習筆記02控制器和路由

ASP.NET MVC學習筆記02控制器和路由

上一篇大致說了下ASP.NET MVC到底是什麼,以及MVC的思想,下面我們就繼續依照官方文件,從MVC的C開始入手,也就是控制器。


MVC的官方解釋以及翻譯

MVC stands for model-view-controller. MVC is a pattern for developing applications that are well architected, testable and easy to maintain. MVC-based applications contain:

  • M odels: Classes that represent the data of the application and that use validation logic to enforce business rules for that data.
  • V iews: Template files that your application uses to dynamically generate HTML responses.
  • C ontrollers: Classes that handle incoming browser requests, retrieve model data, and then specify view templates that return a response to the browser.

翻譯:

MVC代表: 模型-檢視-控制器 。MVC是一個架構良好並且易於測試和易於維護的開發模 式。基於MVC模式的應用程式包含:

  • Models: 表示該應用程式的資料並使用驗證邏輯來強制實施業務規則的資料類。
  • Views: 應用程式動態生成 HTML所使用的模板檔案。
  • Controllers: 處理瀏覽器的請求,取得資料模型,然後指定要響應瀏覽器請求的檢視模板。

控制器

這些概念說來說去似乎越繞越複雜,閒話少敘,從第一個控制器開始。

Step1:新增控制器

右鍵點選解決方案管理器中的Controllers,單擊MVC 5控制器 - 空,然後單擊“新增”。名稱填寫為HelloController

Step2:修改HelloController

上述例子中建立HelloController中修改了預設的Index方法,將返回值修改為了一行html程式碼,開啟瀏覽器除錯檢視。

Step3:直接訪問控制器

輸入/hello 返回指定的Html

Step4:驗證第二個方法

/hello/welcome返回指定的Html

這一切是如何實現的呢?ASP.NET MVC會呼叫不同的控制器類(和其內部不同的操作方法)這取決於傳入URL。 所使用的ASP.NET MVC的預設URL路由邏輯使用這樣的格式來判定哪些程式碼以便呼叫。


路由

這裡就提到了一個很重要的概念,路由(URL Routing),什麼是路由,在ASP.NET MVC中,一個URL請求是由對應的一個Controller中的Action來處理的,由URL Routing來告訴MVC如何定位到正確的Controller和Action。當我們在VS中建立一個新的 ASP.NET MVC程式,程式將會自動使用預設的路由表。

預設路由表

預設路由表存放在App_Start/RouteConfig.cs 中。

在RouteConfig.cs中,定義路由規則的格式如下: /[Controller]/[ActionName]/[Parameters]

路由的組成

如果應用程式並沒有提供任何URL段的,預設為“Home”的控制器和“Index” 的操作方法,在上面的程式碼中的defaults部分指定的:

  • 第一部分的URL確定哪個控制器類會被執行。因此 /HelloWorld對映到 HelloWorldController控制器類。
  • 第二部分的URL確定要執行控制器類中的那個操作方法。因此 /HelloWorld/Index會使得 HelloWorldController控制器類的Index方法被執行。 請注意,我們只需要瀏覽 /HelloWorld路徑,預設情況下會呼叫Index方法。如果沒 有明確的指定操作方法,Index方法會預設的被控制器類呼叫。
  • 第三部分的URL段(Parameters引數)是路由資料。

因此,以剛才的hello訪問為例瀏覽: http://localhost:xxxx/hello/Welcome Welcome方法會被執行並返回字元 串:"This is the Welcome action method...”。 預設的MVC對映為 /[Controller]/[ActionName]/[Parameters] 對於這個URL,控制器類是Hello,操作方法是Welcome,目前還沒有使用過URL的[Parameters]部分。

通過路由傳參

URL的Parameters,也就是引數的傳遞部分。 修改Welcome方法,如下圖,給welcome方法新增兩個形參namenum,並通過htmlencode編碼後輸出。

啟動瀏覽器除錯,輸入帶引數的URL: http://localhost:xxxx/hello/welcome/?name=raphael&num=3

引數的自動裝配

再修改一下welcome方法,將num改為id,輸入url時,把id寫在開頭,用“”分割,傳入name

ASP.NET MVC的路由自動匹配了ID這個引數,為什麼呢?看看上圖中的 ASP.NET預設路由表,url: "{controller}/{action}/{id}",這一行已經添加了id這個引數,因此ASP.NET MVC會自動為我們匹配ID引數。

在ASP.NET MVC應用程式,通過引數傳遞路由資料是為更典型的應用(如同上面用 query string傳遞ID引數)。您還可以在RouteConfig.cs檔案中,新增“Hello”的的路由,增加一條路由來傳遞name 和numtimes`。

在上面的例子中,控制器一直在做著MVC中“VC”部分的職能:也就是檢視和控制器的 工作。該控制器直接返回HTML內容。通常情況下,不會讓控制器直接返回HTML,因為這樣程式碼會變得非常的繁瑣。相反,我們通常會使用一個單獨的檢視模板檔案來幫助 生成返回的HTML。下一篇文章就從檢視開始說起。