MVC應用程式裡的URL請求是通過控制器Controller處理的,不管是請求視圖頁面的GET請求,還是傳遞資料到服務端處理的Post請求都是通過Controller來處理的,先看一個簡單的Controlller:
是個DerivedController,那麼對應處理的URL就是這樣的:localhost:1042/Derived/Index,并且Index這個Action指定了傳回的視圖是MyView,而不是同名的Index視圖,那麼就需要建立一個視圖MyView。在Index這個Action方法内右鍵 - 添加視圖 - MyView,或者在解決方案的Views目錄下建立一個Derived目錄,再右鍵 - 建立視圖 - MyView:
直接Ctrl+F5運作程式浏覽器定位到的url是:localhost:1042,看看路由的定義:
注意路由的最後一行:new { controller = "Home", action = "Index", id = UrlParameter.Optional }
都給預設值了,那麼URL:localhost:1042 其實就是:localhost:1042/Home/Index id是可選參數。
localhost:1042/Home/Index這個Url找的Controller自然是HomeController,Index對應的是HomeController下的Index這個Action,顯然沒有HoomeController,自然會報404錯。
解決方法:
1.把路由的預設值修改成:
2.在浏覽器的url欄裡手動輸入:localhost:1042/Derived/index
可以通過上下文對象Context取一些參數:
跟普通的WebForm裡一樣,可以通過Request.Form接收傳遞過來的參數:
取URL裡/路由的參數:
給Controller傳參:
對應的a标簽是這樣的:
@Html.ActionLink("檢視天氣(傳參)", "ShowWeatherForecast", new { city = "北京", forDate = @DateTime.Now })
再添加對應的視圖:
運作下程式ShowWeatherForecast視圖就顯示了:
要查詢的是:北京 的天氣,查詢的時間是:2013/11/25 21:08:04
當然也可以不傳參但是提供預設值:
沒有傳city,看Controller:
視圖顯示:
要查詢的是:合肥 的天氣,查詢的時間是:2013/11/25 21:16:35
預設值已經起作用了。
控制器裡擷取路由資料:
自然浏覽器就會顯示:Controller: Derived, Action: index
Action裡實作跳轉:
使用Response.Redirect實作跳轉還比較偏WebForm化,MVC裡更應該這麼跳轉:
之前都是類似的Action都是Return的View這裡卻Return的卻是RedirectResult,這就得看方法的傳回值了,方法的傳回值是ActionResult,并不僅僅是ViewResult,可以了解為ActionResult是ViewResult和RedirectResult等等的基類。
這裡甚至可以直接傳回視圖檔案的實體路徑:
常用的Action傳回值類型有:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauADNldjNlRWN4QDMjJDMhJzY4cDO0gDN1kTOyIjYmBjMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
跳轉到别的Action:
上面的方法是跳轉到目前Controller下的另外一個Action,如果要跳轉到别的Controller裡的Action:
傳回普通的Text資料:
傳回XML格式的資料:
傳回JSON格式的資料(常用):
檔案下載下傳:
觸發這個Action就會傳回一個檔案下載下傳提示:
傳回HTTP狀态碼:
傳回RSS訂閱内容:
觸發這個Action就會浏覽器機會顯示:
<a href="http://files.cnblogs.com/oppoic/zy_ControllersAndActionsDemo.zip" target="_blank">本文源碼</a>
<a href="http://www.cnblogs.com/oppoic/p/ef_code_first_dbcontext.html#title03" target="_blank">系列文章導航</a>