前言

本篇介紹 將參數傳遞到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架構篇



本篇文章內容歡迎分享,轉載與使用圖文請來信告知並註明出處。