在ASP.net MVC 3中将表单数据发送到控制器操作有哪些不同的方法?

时间:2011-05-03 08:56:21

标签: c# asp.net-mvc forms asp.net-mvc-3 http-post

我想发布一个包含网格布局的表单数据,每行中的一列包含下拉列表。下拉列表中的选定值映射到该行的项目ID。

我想知道在这种情况下将此数据发布到控制器操作的不同方法是什么?

作为单个参数传递已被忽略选项,因为我的表单将具有动态数据,并且它可能具有n个记录。我这个想法是否正确?

想到FormCollection,这是正确的选择吗?

1 个答案:

答案 0 :(得分:5)

与往常一样,我首先要定义一个视图模型:

public class MyViewModel
{
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> Values { get; set; }
}

然后有一个GET控制器动作,它将填充此视图模型的集合,并在相应的视图中使用编辑器模板:

@model IEnumerable<MyViewModel>
@using (Html.BeginForm())
{
    <table>
        <thead>
            <tr>
                <th>Some column name</th>
            </tr>
       </thead>
        <tbody>
            @Html.EditorForModel()
        </tbody>
    </table>

    <input type="submit value="OK" />
}

并在相应的编辑器模板(~/Views/Shared/EditorTemplates/MyViewModel.cshtml)中:

@model MyViewModel
<tr>
    <td>
        @Html.DropDownListFor(
            x => x.SelectedValue,
            new SelectList(Model.Values, "Value", "Text")
        )
    </td>
</tr>

最后这将发布所选的值:

[HttpPost]
public ActionResult Index(IEnumerable<MyViewModel> model)
{
    ...    
}