MVC-复杂类型的模型绑定

时间:2012-11-06 10:00:44

标签: asp.net asp.net-mvc asp.net-mvc-3

如果我有这样的模型:

public class Search
{
    public int Id { get; set; }
    public string UserDefinedName { get; set; }
    public SearchAge Age { get; set; }
    public virtual ICollection<SearchBachelors> Bachelors { get; set; }
}

我使用以下内容动态渲染Age属性的局部视图:

@Ajax.ActionLink("Age", "SearchAge", new AjaxOptions { UpdateTargetId = "search-stage", InsertionMode = InsertionMode.InsertAfter })

该部分视图如下所示:

@model HireWireWeb.Models.Campaign.Search.Search
<div>
    @Html.DropDownListFor(m => m.Age.MaximumAge, HireWireWeb.Models.Constants.SLIST_AGE_LIST)
    @Html.DropDownListFor(m => m.Age.MinimumAge, HireWireWeb.Models.Constants.SLIST_AGE_LIST)
</div>

(请注意,我没有在此处传递“SearchAge”作为模型,而是它的父级“搜索”,因为它只是如何在呈现的“搜索”下在表单提交上发布“SearchAge”值表格) - According to this Answer

我的问题是,我如何使用“Bachelors”属性的部分视图执行相同的操作,因为它是ICollection?

1 个答案:

答案 0 :(得分:1)

MVC的标准模型绑定系统需要能够创建被“绑定”的类型。它无法创建界面,因此解决此问题的最简单方法是将类型更改为List<SearchBachelors>。然后你可以看到像这样的部分视图:

@model HireWireWeb.Models.Campaign.Search.Search
<div>
    @for(var i = 0;i<Model.Bachelors.Count;++i)
    {
        @Html.TextBoxFor(m => m.Bachelors[i].Name)
    }
</div>

...渲染输出的命名方式是在提交表单时使用列表中元素的索引绑定到List属性。