我总是这样使用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 :(得分:0)
我还没有时间尝试这个,但绊脚石可能是代码试图绑定PropertyInfo
,而不是类的实际属性。我会试一试:
foreach (var property in Model.FormModel.GetType().GetProperties())
{
@Html.DropDownListFor(m => property.Name, SelectList)
}
答案 1 :(得分:0)
我认为这很简单:
@Html.DropDownList(property.Name, SelectList)
不要使用DropDownListFor帮助程序,而是使用DropDownList。