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表达式的经验:有没有其他方法可以生成一个dropdownlist,只需传入属性和选择列表就可以自动获得正确的selected属性?还是我必须写下这个表达式?谢谢

这就是我得到的错误:

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

我还没有时间尝试一下,但绊脚石可能是代码试图绑定PropertyInfo,而不是类上的实际属性。我想试试:

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

我认为它就这么简单:

@Html.DropDownList(property.Name, SelectList)

不要使用DropDownListFor辅助对象,而是使用DropDownList。

相关内容

  • 没有找到相关文章

最新更新