-1

SelectListクラスのパラメーター化されたコンストラクターの1つは、次のようになります。

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

私の問題は、dataValueFieldとdataTextFieldにいくつかの値を割り当てたいのですが、クラスをインスタンス化するときではなく、後の段階でいくつかのチェックを行ってから、渡す値を動的に決定する場合があります。

私が直面している問題は、dataValueFieldとdataTextFieldの値を渡す方法が1つしかないことです。それは、パラメーター化されたコンストラクターを介したものです。

クラスのプロパティのいくつかを使用して、dataValueFieldとdataTextFieldの値を割り当てる方法はありますか?

ありがとう

4

1 に答える 1

1

dataValueFieldとはのdataTextFieldプライベートメンバーでありMultiSelectList、の基本クラスであるため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");
于 2013-03-20T19:40:06.770 に答える