2016-03-23 63 views
3

這是模型:填充下拉列表自IEnumerable,設置選定值

public class PolicyDetail 
{ 
    public Policy Policy { get; set; } 
    public IEnumerable<Insured> Insured { get; set; } 
    public IEnumerable<Risk> Risk { get; set; } 
    public IEnumerable<Construction> Construction { get; set; } 
} 

建築看起來就像這樣:

public class Construction 
{ 
    public int ConstructionID { get; set; } 
    public string ConstructionType { get; set; } 
} 

而在DB,只有4個行。這基本上是一個枚舉。

和風險內是這樣的屬性:

public int ConstructionID { get; set; } 

之前發送的模式來看,我們填補了內PolicyDetail,其中保險與風險是政策的孩子每個對象。建築每次都裝滿了它的所有四行。

因此,在模型中,我們列出所有風險。當我們顯示它們時,我們想要顯示Constructions作爲下拉列表,並將選定的值設置爲Risk.ConstructionID中的值。

令人驚訝的是,這些簡單的下拉菜單可以在MVC中燒盡多少心臟。

@foreach (var item in Model.Risk) 
{ 
    ... Other items in Risk 

    <div class="form-group"> 
     @Html.Label("Construction Type", new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList(?????????) 
     </div> 
    </div> 

    ... Other items in Risk 
} 

我如何填補,從

Model.Constrution 

下拉與所有的項目和所選擇的項目設置什麼在

item.ConstrucitonID 

謝謝!

編輯:

這裏的工作解決方案:

@Html.DropDownList("ConstructionType", new SelectList(Model.Construction.Distinct().ToList(), "ConstructionID", "ConstructionType", item.ConstructionID)) 

回答

4

您需要將IEnumerable<Construction>轉換爲SelectList,並指定所選的值。

類似以下內容(注:我沒有VS代碼這一點,所以語法或參數可能是不正確的,但你的想法)

@Html.DropDownList("ddlConstructionId", new SelectList(Model.Constrution, "ConstructionID" , "ConstructionType", item.ConstrucitonID)) 

你需要指定創建SelectList時的選定值。我認爲這是最好的構造函數您:

public SelectList(
    IEnumerable items, 
    string dataValueField, 
    string dataTextField, 
    object selectedValue 
) 

所以,你的情況,這將是:

@Html.DropDownList("CompanyName", 
       new SelectList(Model.Construction.Distinct().ToList(), "ConstructionID", "ConstructionType", item.ConstrucitonID)); 
+0

好,謝謝。看我的編輯。 –

+0

我們正在接近!我收到這個錯誤:DataBinding:'System.String'不包含名稱爲'ConstructionID'的屬性。 –

+0

這是因爲在你選擇的時候,你選擇的是一個字符串的ConstructionType。選擇具有ConstructionID和ConstructionType的整個對象 –