前言
本篇介紹 將參數傳遞到Controller 與 將資料傳遞到View 的方法,雖然與正統使用ViewModel的方式不同,但其中包含了許多基礎的概念,分享給大家參考。
若有講解錯誤或建議,請各位先進不吝指教。
介紹
如何傳遞參數到Controller範例(form與 input使用法方請見第二篇 html 介紹)
開啟範例程式,我們先開啟Views\Home\Index.html 進行改寫,內容如下:我們增加一個Html form(使用Post方法)、兩個文字輸入框與一個送出按鈕,文字輸入框的
name 屬性,分別為name 與 age。
開啟Controllers\HomeController,我們修改程式內容如下:
我們另外增加了一個Index action,設定接收條件HttpPost (與form的方法相同), 並且給予兩個
傳入參數,名稱分別為 name 與 age(接入參數名稱必須與 input 內的 name 屬性名稱相同,才
能接到傳入參數)。
我們要怎麼確定資料有傳遞進入HomeController呢?
我們可以透過點擊編寫程式碼視窗邊框增加一個中斷點,啟動專案、輸入資料並且送出,
即可將程式執行停留在中斷點,此時只需要將滑鼠移到變數上,即可看見目前的內容值,
確認參數有正確傳遞。
在這個範例中,我們限制限制透過Http Post接收,若對應的方法不正確,會出現404 not found
的訊息。
在Asp .Net MVC中,資料傳遞的方式是透過input name對應進行傳遞,如果遭遇name相同的情
況下,傳入參數會變成list進行傳遞。當然,您如果曾經寫過Web form相關程式,也可以直接
擷取Ruquest的資訊進行處理:您可以參考這篇文章 [ASP .NET] Request.QueryString and Request.Form (ASP .Net MVC Example)
如何從從controller傳遞參數至View進行呈現
在後端,我捫常常需要將處理好的資訊,傳遞到View中進行呈現,常見的傳遞方式與作法如下:
我們還沒帶入ViewModel的概念,故我們先不介紹ViewModel方法。
我們以ViewBag的方式,介紹如何簡單傳遞資料的方法,ViewBag有個好處,就是不需要處
理型別(dynamic 型別包裝),而取出使用的時候在進行轉換型別即可使用。
我們只需要在相對應的action中輸入ViewBag.變數,即可直接使用,例如:
ViewBag.Name = "Duran";
而在相對應的View上直接輸入@ViewBag.Name,在畫面上,即可直皆印出Duran的文字。
結果
如此一來,您已經可以處理一個簡單的表單送出的資訊,並且回饋簡單訊息給使用者。
當然,這非常的基礎。一般作法會使用ViewModel(DTO)的方式,將資料傳遞到View進行呈
現。透過ModelBinding的方式,可以作到資料驗證、呈現變更、資料過濾...等許多方便的功
能。在某些情境下,我們不需要更改.cshtml,只需更改ViewModel上的filter attribute,即可達
到不同的效果。
下一篇,我們會介紹View。
範例程式
https://dl.dropboxusercontent.com/u/13585157/MVCDemo.zip參考資料:
1.ASP.NET MVC 3 - ViewBag 裡使用方法(Method)http://kevintsengtw.blogspot.tw/2012/04/aspnet-mvc-3viewbag-method.html
上一篇:[Asp .Net MVC] Controller and View 1 - Controller 架構篇
下一篇:[Asp .Net MVC] Controller and View 3 - View架構篇
本篇文章內容歡迎分享,轉載與使用圖文請來信告知並註明出處。
1 留言
您好, 你的文章很不錯, 我學到很多。我發現你在本篇文章一開始提到:
回覆刪除「本篇介紹 將參數傳遞到Controller 與 將資料傳遞到View 的方法」, 這裡你設了兩個錨點, 建議使用相對路徑, 例如: 將參數傳遞到Controller, 這樣點擊後就可以很快跳到指定的位置了, 因為你是用絕對路徑, 所以點下去後又會再連到網際網路又再連回本頁面, 然後才跳到你指定的位置