天天看點

ASP.NET MVC Controllers and Actions

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傳回值類型有:

ASP.NET MVC Controllers and Actions
ASP.NET MVC Controllers and Actions

跳轉到别的Action:

上面的方法是跳轉到目前Controller下的另外一個Action,如果要跳轉到别的Controller裡的Action:

傳回普通的Text資料:

傳回XML格式的資料:

傳回JSON格式的資料(常用):

檔案下載下傳:

觸發這個Action就會傳回一個檔案下載下傳提示:

ASP.NET MVC Controllers and Actions

傳回HTTP狀态碼:

傳回RSS訂閱内容:

觸發這個Action就會浏覽器機會顯示:

ASP.NET MVC Controllers and Actions

<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>