我们可以直接在MVC回发控制器操作中访问asp:Label
值吗?我还想知道如何访问ASP.NET MVC回发控制器操作中的hiddenField
值。
答案 0 :(得分:18)
在ASP.NET MVC中,您不使用<asp:...
标记,但您可以尝试将表单中的任意数量的输入POST到控制器操作,其中CustomViewModel
类可以绑定到数据并让你进一步操纵它。
public class CustomViewModel
{
public string textbox1 { get; set; }
public int textbox2 { get; set; }
public string hidden1 { get; set; }
}
例如,如果您在MVC 3中使用Razor语法,则View可能如下所示:
@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");
}
答案 1 :(得分:4)
在ASP.NET MVC中,永远不应该使用诸如asp:Label
之类的服务器端控件,因为它们依赖于ASP.NET MVC中不再存在的ViewState和PostBack。因此,您可以使用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
...
}