我的模型可以在List<T>
在我看来,我有以下内容:
@using (Html.BeginForm())
{
int count = Model.Data.Filters.Count;
for(int i = 0; i < count; i++)
{
<div>
@Html.TextBox("filtervalue" + i)
@Html.DropDownList("filteroptions"+i,Model.Data.Filters[i].FilterOptions)
</div>
}
@Html.Hidden("LinkID", Url.RequestContext.RouteData.Values["id"])
}
我的控制器中是否有一种方法可以设置POST操作方法以绑定到包含可变项的模型?
另外,我将如何构建模型以应对此问题?
由于
答案 0 :(得分:4)
您可以使用编辑器模板,这将更容易:
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Data.Filters)
@Html.Hidden("LinkID", Url.RequestContext.RouteData.Values["id"])
}
并在编辑器模板(~/View/Shared/EditorTemplates/FilterModel.cshtml
)内部,它将自动为Model.Data.Filters
集合的每个元素呈现:
@model FilterModel
<div>
@Html.TextBoxFor(x => x.FilterValue)
@Html.DropDownListFor(x => x.SelectedFilterOption, Model.FilterOptions)
</div>
现在你的POST控制器动作将如下所示:
[HttpPost]
public ActionResult Foo(SomeViewModel model)
{
// model.Data.Filters will be properly bound here
...
}
感谢编辑器模板,您不再需要在视图中编写任何foreach循环,或者担心如何命名输入字段,发明一些索引,...以便默认模型绑定器在回发时识别它们。