25

私は Enum を拡張しています。次のコードを考えると、Enum のselectListItemsすべての正しい値を持つ SelectListItems の一般的なリストです。

最初の foreach ループは正常に動作します。ただし、実際の SelectList を作成して渡すとselectListItems、すべての値が失われます。これらの値をそのまま維持するにはどうすればよいですか?

foreach (SelectListItem item in selectListItems)
{
    string tex = item.Text;
    string val = item.Value;
    string sel = item.Selected.ToString();
}

SelectList selectList = new SelectList(selectListItems);

foreach (SelectListItem slid in selectList)
{
    string tex = slid.Text;
    string val = slid.Value;
    string sel = slid.Selected.ToString();
}
4

1 に答える 1

54

ビルドする行を変更して、値を探す場所を指定する必要があります。あなたの場合は次のようになります。

SelectList selectList = new SelectList(selectListItems, "Value", "Text");

ただし、選択したアイテムは引き継がれません。その場合、どの項目を選択する必要があるかを判断し、4 番目のパラメーターを介してその値を渡す必要があります。

次に例を示します。

List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = "Test1", Value = "1", Selected = false });
items.Add(new SelectListItem() { Text = "Test8", Value = "8", Selected = true });
items.Add(new SelectListItem() { Text = "Test3", Value = "3", Selected = false });
items.Add(new SelectListItem() { Text = "Test5", Value = "5", Selected = false });

SelectList sl = new SelectList(items, "Value", "Text", "8");

また、役立つかもしれないこの SO スレッドをチェックすることもできます。

編集:あなたのコメントを見ただけで、デフォルトでフィールドTextとフィールドを探すことを知るほど賢くないため、機能しません。Valueオブジェクトのタイプを渡すことができ、TextおよびValueプロパティにマップするプロパティを定義することで、オブジェクトにバインドできます。

于 2010-06-30T16:31:21.210 に答える