2013-07-29 24 views
1

我一直使用DropDownListFor這樣一般使用DropDownListFor與反射

Html.DropDownListFor(m => m.PropertyOfTheModel, SelectionList) 

只要你知道你正在試圖建立一個下拉列表屬性的準確名稱,這工作正常(在這種情況下:PropertyOfTheModel)。

現在我有一個不同的任務。我的模型包含一個固定屬性,聲明爲object,並且被稱爲FormModel。使用反射假設我想爲FormModel中包含的所有屬性構建一個下拉菜單。感謝我設法解決SelectionList部分的屬性,現在我必須寫出第一個參數,但我不知道如何去做。

foreach (var property in Model.FormModel.GetType().GetProperties()) 
{ 
    @Html.DropDownListFor(m => m.FormModel.GetType().GetProperty(property.Name), SelectList) 
} 

上面的代碼不工作:我該如何寫它?我在編寫lambda表達式方面沒有經驗:是否有任何替代方法可以生成一個只需傳遞屬性和選擇列表即可自動獲取正確selected屬性的下拉列表?或者我必須寫出表達式?謝謝!

這是我的錯誤:

模板只能與現場訪問,屬性訪問, 一維數組索引,或單參數定製索引 表達式中使用。

+0

FormModel中的所有屬性都是公共的嗎?也許你需要將BindingFlags傳遞給GetProperty來過濾非公共屬性? – mcliedtk

+0

有一部分代碼我沒有發佈,但確保只有公共屬性到達DropDownListFor。沒有發佈,因爲我認爲它不相關。 – Saturnix

回答

0

我還沒有時間來嘗試一下,但絆腳石可能是代碼試圖綁定PropertyInfo,而不是類的實際屬性。我想給這一個鏡頭:

foreach (var property in Model.FormModel.GetType().GetProperties()) 
{ 
    @Html.DropDownListFor(m => property.Name, SelectList) 
} 
+0

請注意,property.Name是一個字符串,最重要的是,我想爲m.FormModel創建一個下拉列表,而不僅僅是m。 m只是一個泛型模型,它包含(在FormModel屬性中)我想要編輯的實際模型。不幸的是,它不工作:(無論如何感謝您的建議。 – Saturnix

0

我認爲它是如此簡單:

@Html.DropDownList(property.Name, SelectList) 

不要使用DropDownListFor幫手,但DropDownList的來代替。