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动作方法绑定到一个模型与变量项在它?

我该如何构建模型来处理这个问题?

谢谢

Model与List<T>中可变数量的项目绑定

您可以使用编辑器模板,这会更容易:

@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循环或担心如何命名输入字段,创建一些索引,…以便默认模型绑定器在回发时识别它们