我们能否直接在MVC回发控制器操作中访问asp:Label
的值?我还想知道如何在ASP.NET MVC回发控制器操作中访问hiddenField
的值。
我们能否直接在MVC回发控制器操作中访问asp:Label
的值?我还想知道如何在ASP.NET MVC回发控制器操作中访问hiddenField
的值。
<asp:...
标记,但是你可以将任意数量的输入提交到控制器操作中的一个表单中,其中一个CustomViewModel
类可以绑定数据并让你进一步操作它。public class CustomViewModel
{
public string textbox1 { get; set; }
public int textbox2 { get; set; }
public string hidden1 { get; set; }
}
例如,如果你在MVC 3中使用Razor语法,你的视图可能看起来像这样:@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 类中,假设它叫 Save,可能如下所示:
[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");
}
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" />
<% } %>
并且需要一个控制器动作来接收该POST请求:
[HttpPost]
public ActionResult Index(SomeViewModel model)
{
// model.Foo will contain the hidden field value here
...
}