如何在asp.net mvc回发控制器动作中访问hiddenField值?

时间:2011-03-09 22:15:56

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3

我们可以直接在MVC回发控制器操作中访问asp:Label值吗?我还想知道如何访问ASP.NET MVC回发控制器操作中的hiddenField值。

2 个答案:

答案 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
    ...
}