我一直像这个一样使用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表达式的经验:有没有其他方法可以生成一个dropdownlist,只需传入属性和选择列表就可以自动获得正确的selected
属性?还是我必须写下这个表达式?谢谢
这就是我得到的错误:
模板只能与字段访问、属性访问、,一维数组索引或单参数自定义索引器表达式。
我还没有时间尝试一下,但绊脚石可能是代码试图绑定PropertyInfo
,而不是类上的实际属性。我想试试:
foreach (var property in Model.FormModel.GetType().GetProperties())
{
@Html.DropDownListFor(m => property.Name, SelectList)
}
我认为它就这么简单:
@Html.DropDownList(property.Name, SelectList)
不要使用DropDownListFor辅助对象,而是使用DropDownList。