将数据从View传递到Controller操作

时间:2012-03-02 12:38:29

标签: asp.net-mvc-3

我有一个View,它通过返回JSON数据的Action方法获取一些数据。 根据所选选项的组合,用户可以填充页面中的某些字段。 将数据传回控制器以便保存的最佳方法是什么?

  • 包含数据的字段因所选选项而异;
  • 我没有ViewModel对象,所有字段都绑定到View。

目前我有这个:

@Ajax.BeginForm("MyAction", null, new AjaxOptions
            {
            }, new { @id = "SaveForm" } )
{
    .....
    @Html.RadioButton("SomeRadioButton", "bla", false, new { @id = "SomeRadioButton" })
    .....
    @Html.TextArea("SomeTextArea", new { @id = "SomeTextArea" })
    .....
    <a href="#" onclick="$('#SaveForm').submit();">Save</a>
}

如何在Action中获取所有这些控制值?

我可以添加以下内容:

public void MyAction(FormCollection form)
{
    .........
}

但我真的不喜欢这个选项。 实现这个目标的最简洁方法是什么?

提前致谢

2 个答案:

答案 0 :(得分:3)

您可以定义视图模型:

public class MyViewModel
{
    public string SomeRadioButton { get; set; }
    public string SomeTextArea { get; set; }

    ... 
}

然后让你的控制器操作将此视图模型作为参数并保留默认模型绑定器完成其工作:

[HttpPost]
public void MyAction(MyViewModel model)
{
    ...
}

我还会在视图中利用此视图模型,以便使用强类型版本的帮助程序:

@Ajax.BeginForm("MyAction", null, new AjaxOptions { }, new { @id = "SaveForm" })
{
    @Html.RadioButtonFor(x => x.SomeRadioButton)
    ...
    @Html.TextAreaFor(x => x.SomeTextArea)
    ...
    <button type="submit">Save</button>
}

答案 1 :(得分:1)

你可以(并且大多数应该)为此使用自定义类,它将包含所有字段。进一步阅读Model Binding - 这是使用MVC的方法。