2011-03-09 50 views

回答

18

在ASP.NET MVC中,你不使用<asp:...標籤,但你可以嘗試張貼任何數量的將表單輸入到控制器操作中,其中CustomViewModel類可以綁定到數據並讓您進一步操作它。

public class CustomViewModel 
{ 
    public string textbox1 { get; set; } 
    public int textbox2 { get; set; } 
    public string hidden1 { get; set; } 
} 

例如,如果你在MVC 3使用剃刀語法,你的視圖可能看起來像:

@using (Html.BeginForm()) 
{ 
    Name: 
    <input type="text" name="textbox1" /> 
    Age: 
    <input type="text" name="textbox2" /> 
    <input type="hidden" name="hidden1" value="hidden text" /> 
    <input type="submit" value="Submit" /> 
} 

然後在你的控制器動作,其自動將這些數據綁定到你的ViewModel類,讓我們說它被稱爲保存,可能看起來像:

[HttpPost] 
public ActionResult Save(CustomViewModel vm) 
{ 
    string name = vm.textbox1; 
    int age = vm.textbox2; 
    string hiddenText = vm.hidden1; 
    // do something useful with this data 
    return View("ModelSaved"); 
} 
+2

應該鼓勵使用視圖模型,而不是我所瞭解的FormCollection。 – 2011-03-09 23:10:36

+0

@havok:修改答案以加強視圖模型 – 2011-03-10 15:03:45

+0

現在這是一個很好的答案+1 – 2011-03-10 20:30:57

4

在ASP.NET MVC服務器端控件(如asp:Label)不應該被使用,因爲它們依賴ViewState和PostBack,它們是ASP.NET MVC中不再存在的概念。所以你可以使用HTML助手來生成輸入字段。例如:

<% using (Html.BeginForm()) { %> 
    <%= Html.LabelFor(x => x.Foo) 
    <%= Html.HiddenFor(x => x.Foo) 
    <input type="submit" value="OK" /> 
<% } %> 

,並具有將接收後的控制器操作:

[HttpPost] 
public ActionResult Index(SomeViewModel model) 
{ 
    // model.Foo will contain the hidden field value here 
    ... 
} 
相關問題