通用DropDownListFor与反射

时间:2013-07-29 12:49:42

标签: c# reflection

我总是这样使用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属性?或者我必须写表达式?谢谢!

这是我得到的错误:

  

模板只能用于字段访问,属性访问,   单维数组索引或单参数自定义索引器   表达式。

2 个答案:

答案 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。

相关问题