在ASP.NET MVC架構中,將視圖中的資料傳遞到控制器中,主要通過發送表單實現的.具體使用中,主要使用以下三種方法.
1、通過Request.Form讀取表單資料 2、通過FormCollection讀取表單資料 3、直接讀取表單資料對象
下邊是我學習這些東西時的一點總結
1、通過Request.Form讀取表單資料
首先定義一個Person類如下:
public class Person { public string FirstName { get; set; } public string LastName { get; set; } }在HomeController中定義如下方法,用於接收View傳來的資料:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult RequestForm() { Person person = new Person(); person.FirstName = Request.Form["FirstName"]; person.LastName = Request.Form["LastName"]; return View(person); }
這個方法通過Request.Form分別讀取View傳來的兩個文字框"FirstName"和"LastName"中的資料,然後得到Person類執行個體化對象person.
這些資料是HomeView傳來的.實現表單的代碼如下:
<fieldset> <p> <%using (Html.BeginForm("RequestForm", "Home")) {%> FirstName:<%=Html.TextBox("FirstName")%><br /> LastName:<%=Html.TextBox("LastName")%> <input type="submit" name="提交" value="RequestForm" /><br /> <%} %> </p> </fieldset>
其中:Html.BeginForm("RequestForm", "Home")是MVC中的FormExtensions類中的擴充方法.第一個參數指明接收表單的Action,第二個參數指明接受表單的Controller.
這條語句指明了Home Controller中的Action RequestForm接受了剛才傳遞來的資料.發送的表單資料兩個文字框:"FirstName"和"LastName"
點擊提交按鈕Submit後的結果如下:
可以看到,對象person成功接收了表單傳來的資料.
2、通過FormCollection讀取表單資料
ASP.NET MVC中的FormCollection對象是提交的Form中所有對象的集合.
為了通過FormCollection讀取表單資料,設定如下表單:
<fieldset>
<p>
<%using (Html.BeginForm("FormCollection", "Home"))
{ %>
FirstName:<%=Html.TextBox("FirstName")%><br />
LastName:<%=Html.TextBox("LastName")%><br />
<input type="submit" name="Submit" value="FormCollection" /><br />
<%} %>
</p>
</fieldset>
(Writer的插入代碼塊功能突然就不能用了,鬱悶中.....)
可以看出,處理表單的Action是HomeController中的FormCollection方法.發送的表單依然是來年改革文字框.
FormCollection方法的實現如下:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult FormCollection(FormCollection formCollection)
{
Person person = new Person();
person.FirstName = formCollection["FirstName"];
person.LastName = formCollection["LastName"];
return View(person);
}
FormCollection類型是傳入Form中表單值的提供者(MSDN裡邊這麼說的,不是很理解).FormCollection()方法中傳入了FormCollection類型的參數,該參數會自動綁定表單中的所有資料.
通過FormCollection可分別擷取兩個文字框中的資料,然後得到Person類的執行個體化對象person.結果如下:
3、直接讀取表單資料對象
為直接讀取表單對象,設定如下表單:
<fieldset>
<p>
<%using (Html.BeginForm("Person", "Home"))
{ %>
FirstName:<%=Html.TextBox("FirstName")%><br />
LastName:<%=Html.TextBox("LastName")%><br />
<input type="submit" name="Submit" value="Person" /><br />
<%} %>
</p>
</fieldset>
處理該表單的Action是HomeController中的Person方法.發送兩個文字框中的資料.
Person() 的實現如下:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
在上述代碼中,Person()方法中傳入了Person型別參數,其內部讀取了兩個文字框中的"FirstName"和"LastName"中的資料,直接得到Person類的執行個體化對象person.
程式的運行結果如下:
直接讀取表對象時,發送表單的文字框必須與資料對象屬性的名稱相一致(不區分大小寫)
Technorati 標籤: MVC,表單資料繫結