2012-11-06 188 views
2

如果我有這樣的一個型號:MVC-模型綁定的複雜類型

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; } 
} 

我渲染年齡財產局部視圖動態使用這樣的事情:

@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」作爲模型在這裏,而是它的父母,「Se拱「,因爲它只是如何我可以得到在表單提交,在呈現的」搜索「形式下發布的」SearchAge「值) - According to this Answer

我的問題是,我該如何做同樣的事情, Bachelors「財產,因爲這是一個ICollection?

回答

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財產提交表格。

+0

這將工作。但我使用Ajax.ActionLink渲染這些部分視圖,而不是一次全部渲染。如果其中一個已經被渲染,並且數據被輸入,重新渲染將會清除該數據。 – ncabral

+1

我有一個保存呈現文本框的增量值的會話變量。這樣我避免了循環,當我想要的時候仍然可以渲染一個物品。謝謝。這有幫助! – ncabral

+0

不錯的一個,很高興有幫助:) –