10

Background: I have 4 dropdown lists on my page that all use one List of SelectListItem to pull data from. All 4 of these dropdowns will always have the same exact elements in them. Each dropdown has an empty element at the top.

Problem: If I do not select an item from the list that renders 2nd, when the page loads the 2nd list automatically selects the item that is selected in the 1st list. This is because (I think) the list has a SelectListItem where Selected = true, and it just uses that one in the second list.

Is there any way to use one list source for multiple dropdown lists? I don't want to duplicate this list 4 times unless I absolutely have to...

Code:

//this is the list source
public IEnumerable<SelectListItem> PossibleItems { get; set; }

//this is the code on my .cshtml page
@Html.DropDownListFor(x => x.SelectedItem1, Model.PossibleItems)
@Html.DropDownListFor(x => x.SelectedItem2, Model.PossibleItems)
@Html.DropDownListFor(x => x.SelectedItem3, Model.PossibleItems)
@Html.DropDownListFor(x => x.SelectedItem4, Model.PossibleItems)
4

4 に答える 4

4

リストでは、次のように 4 つのドロップダウン リストごとに異なる SelectList エンティティを作成する必要があります。

@Html.DropDownListFor(x => x.SelectedItem1, 
    new SelectList(Model.PossibleItems, "dataValue", "textValue", Model.SelectedItem1))
@Html.DropDownListFor(x => x.SelectedItem2, Model.PossibleItems)
    new SelectList(Model.PossibleItems, "dataValue", "textValue", Model.SelectedItem2))
@Html.DropDownListFor(x => x.SelectedItem3, Model.PossibleItems)
    new SelectList(Model.PossibleItems, "dataValue", "textValue", Model.SelectedItem3))
@Html.DropDownListFor(x => x.SelectedItem4, Model.PossibleItems)
    new SelectList(Model.PossibleItems, "dataValue", "textValue", Model.SelectedItem4))

この例では、「dataValue」と「textValue」は、ドロップダウン オプションの値とテキスト要素に対応する SelectListItem オブジェクトのプロパティです。

于 2013-09-18T19:45:23.427 に答える
0

現在持っているコードはそれを行うための最良の方法であり、そのままで機能するはずです。SelectListItemにはSelectedプロパティがありますが、これは通常、SelectListインスタンスによって設定されます。それ以外の場合は、このプロパティを自分でどこかに手動で設定する必要があります。IEnumerable<SelectListItem>インスタンス化された の代わりに使用しているためSelectList、すべての項目がデフォルトでSelectedfalse になっているはずです。Razor がDropDownListForコントロールをレンダリングするときだけ、列挙型が実際のコントロールSelectListになり、モデルに基づいて選択された値が設定されます。他のコードを確認し、選択したステータスをどこにも手動で設定していないことを確認してください。

FWIW、空のアイテムを手動で追加する必要はありません。DropDownListForコントロールには空のアイテムをリストに追加する手段があります。

@Html.DropDownListFor(x => x.SelectedItem1, Model.PossibleItems, string.Empty)
于 2013-09-18T19:46:06.040 に答える