Вы можете использовать шаблоны редактора, это будет намного проще:
@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 в ваших представлениях или беспокоиться о том, как их назватьполя ввода, придумайте некоторые проиндексированные, ... чтобы связыватель модели по умолчанию распознал их при обратной передаче.