System.Web.Mvc命名空间下的SelectList类公开了哪些公共属性?

时间:2013-03-20 17:18:21

标签: c# asp.net-mvc

SelectList类的参数化构造函数之一如下所示: -

public SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue);

我的问题是我想为dataValueField和dataTextField分配一些值,但是在实例化类而不是稍后阶段可能是在进行一些检查之后,然后动态决定要传递给哪些值。

我面临的问题是只有一种方法可以传递dataValueField和dataTextField的值,这是通过参数化构造函数。

有没有办法可以使用类的某些属性来分配dataValueField和dataTextField的值。

谢谢

1 个答案:

答案 0 :(得分:1)

dataValueFielddataTextFieldMultiSelectList的私有成员,它是SelectList的基类,因此您可以使用反射设置这些字段。例如:

  var selectList = new SelectList(new Dictionary<int, int> { { 1, 2 }, { 3, 4} });

  var privateFields = selectList.GetType().BaseType.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);

  privateFields.Single(i => i.Name.Contains("DataTextField"))
               .SetValue(selectList, "value");

  privateFields.Single(i => i.Name.Contains("DataValueField"))
               .SetValue(selectList, "key");