Model与List中可变数量的项目绑定
本文关键字:绑定 项目 List Model | 更新日期: 2023-09-27 18:08:55
我有一个模型,可以在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动作方法绑定到一个模型与变量项在它?
我该如何构建模型来处理这个问题?
谢谢
您可以使用编辑器模板,这会更容易:
@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循环或担心如何命名输入字段,创建一些索引,…以便默认模型绑定器在回发时识别它们