web-dev-qa-db-ja.com

ASP.Net MVC SelectLIstおよびList <SelectListItems>の問題

私は列挙型を拡張しており、次のコードを指定すると、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();
}
25
Ted

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

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");

this SO thread も参考になるかもしれません。

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

53
Kelsey