學習 ASP.NET MVC (第三回)實戰篇
系列文章導航:
創建Controllers和Views
我們再次回顧下ASP.NET MVC的基本工作流程:
URL-->Controller(會執行一個方法Action)-->從數據庫中獲取一個Model對象-->將Model作為ViewData傳遞給View(Detail.aspx)。
和傳統的Web架構不同的是,請求的URL不是映射 URL 地址到特定文件,而是映射到類的方法上。這些類就是 MVC 中的 Controller 控制器,它們負責處理進來的請求和用戶輸入,接收和保存數據,并返回結果給客戶端(顯示 HTML、下載文件、或重定向到不同的 URL 等等)。
例如:請求http://localhost:2121/Account/LogOn,則代表有個叫Account的Controller,有個叫LogOn的Action。
添加 UsersController 控制器
右鍵點擊 Web 項目中的 Controllers 文件夾,選擇 Add ->Controller:
添加一個名為UsersController的Controller,默認情況下vs為我們生辰如下代碼:
{
//
// GET: /Users/
public ActionResult Index()
{
return View();
}
}
這里我們先做下簡單的修改:

這時運行項目,在地址中輸入:http://localhost:2121/Users
上面的兩個地址請求,一個就是獲得所有Users信息的請求,一個就是通過編號或得詳細信息的請求。那么MVC是通過什么獲取到相應的Controller呢?對ASP.NET MVC有一定了解的人應該都知道,那就是: ASP.NET MVC Routing
ASP.NET MVC Routing
ASP.NET MVC 包含強大的 URL 路由引擎,提供了很好的靈活性來控制 URL 如何映射到控制器類。它允許我們完全定制 ASP.NET MVC 如何選擇 controller 類,調用哪一個方法,以及從 URL/Querystring 中自動解析變量值,并作為參數傳遞給方法。
默認情況下,新的 ASP.NET MVC 項目已經注冊了預配置的 URL 路由規則,這樣允許我們輕松啟動應用程序,而不需要配置任何東西。可以在項目中的Application 類中看到默認的路由規則注冊。在范例項目的根目錄,雙擊 Global.asax 文件。默認情況下:

上述調用的 routes.MapRoute() 方法注冊了一個默認的路由規則,映射請求的 URL 到 controller 類使用的。 URL 格式為:/{controller}/{action} /{id},這里 controller 是指需要實例化的類名,action 是將調用的公共方法的名稱,id 是一個可選的參數。嵌入在 URL 地址中,用來傳遞參數給方法。傳遞給 MapRoute() 方法的第三個參數是一組 controller/action/id 默認值,在 URL 沒有指定時,Controller=Home、Action=Index、Id=””。
簡單了解了Routing,接著我們的Demo。在UsersController中使用UsersRepository.cs(上篇中):
我們使用之前創建的 DinnerRepository 類來實現model現有的 Index() 和 Details() action 方法。

控制器 Controller 使用視圖 Views:
通常情況下,我們不是通過Response.Write() 方法返回給客戶端。Action方法中僅僅出來業務和數據邏輯,并將相關的數據傳遞給單獨的視圖(view)模板,view 負責生成 HTML 展示。view 模板就是一個簡單的文本文件,通常包含 HTML 標識和嵌入的腳本。

View() 輔助方法的第一個參數是 view 模板文件,用來生成 HTML 響應。第二個參數是 model 對象,包含了 view 模板生成 HTML 響應所需要的數據。
下面,我們開始實現 NotFound、Details、和 Index 視圖模板。
NotFound:
在Users文件夾上右鍵--添加View
在View Name:中輸入NotFound
點擊Add,就會在我們的View/Users文件夾下創建一個NotFound.aspx 視圖模板。
一旦我URL中沒有相應的記錄,就會跳轉到這個頁面:
這里,數據庫中并沒有編號是63的用戶的記錄。這樣NotFound模板就ok啦。
Details:
用幾乎同樣的方式添加Details模板
值得注意的是:要選擇 Create a strongly-typed View(創建強類型視圖)復選框,并從下拉列表框中選擇從Controller 傳遞到 View 的 Model 模型類型。針對正在創建的 Details 視圖,我們將傳遞 Users對象(該類型完整的名稱是 UserInfo.Models.Users)。
查看添加的Details.aspx文件,可以看到自動生成的html代碼。發現該頁面包含一些靜態的 HTML 和嵌入展示代碼。在視圖模板呈現時,<% %> 代碼塊就會執行,<%= %> 代碼塊執行其中的代碼,并呈現結果到視圖的輸出中展示。有關html的輔助方法我后面會提到。
Index:
添加Index視圖模板:
注意這里選擇的content是List。系統還是會為我們自動生成html代碼。

和傳統的Web Form不同的是,我們沒有了aspx.cs文件,而是直接將生成html的代碼這在aspx中。這里的一些HTML輔助方法我會在后面提到。
ok,運行我們的程序:
Index:
Details:
這樣,Index,Details,NotFound就完成了。先寫到這里,下篇繼續。實現添加,修改等操作。