2

如果我有这样的模型:

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”作为模型传递,而是它的父级“Search”,因为它只是我如何在呈现的“Search”表单下获取表单提交上发布的“SearchAge”值)-根据这个答案

我的问题是,我怎么能对“单身汉”属性的部分视图做同样的事情,因为它是一个 ICollection?

4

1 回答 1

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在您提交表单时使用列表中元素的索引绑定到您的属性。

于 2012-11-06T10:43:41.563 回答