Как именно работает выбранное значение selectList?

Мне нужно создать раскрывающийся список, и я делаю это, создавая новый SelectList на основе модели. Вот как я пытаюсь это сделать:

@Html.DropDownListFor(model=>model.SelectedStudio, new SelectList(Model.Studios, "Id", "Name", Model.Studio)

Из сигнатуры класса я вижу, что последним параметром является объект selectedValue. Сейчас я пробовал много вариантов, пытаясь передать туда строку, объект и т. д., но когда я компилирую программу, выбранное значение для выпадающего списка никогда не устанавливается на то, что я хочу.

Кто-нибудь может объяснить, как это работает?

РЕДАКТИРОВАТЬ: я не знаю, важно ли это, но идентификатор Studio имеет тип ObjectId (из драйвера MongoDB С#)


person ab1428x    schedule 06.06.2014    source источник


Ответы (4)


Я думаю, что вы не устанавливаете выбранное значение в новом SelectList

ваш код должен быть

 @Html.DropDownListFor(model=>model.SelectedStudio, new SelectList(Model.Studios, "Id", "Name", [Defualt value])

причина, по которой он не дает ошибки, потому что это объект. и ваша настройка списка IEnumerable. так это объект. см. следующую ссылку

http://msdn.microsoft.com/en-us/library/dd492553%28v=vs.118%29.aspx

person PEO    schedule 07.06.2014
comment
Хорошо, дайте мне знать, какую часть вы не можете понять. Дайте мне знать, что Model.Studios входит в список ваших любимых? - person PEO; 07.06.2014
comment
да, model.studios - это мой перечисляемый список, который загружается в раскрывающийся список. Однако указание selectedValue (последний параметр) ничего не делает. Итак, я предполагаю, что последний параметр может не делать того, что я предполагал, поэтому в таком случае что делает последний параметр? Или я неправильно передаю последний параметр. - person ab1428x; 07.06.2014
comment
Каково имя вашего свойства, которое выбрало значение из списка? - person PEO; 08.06.2014

Попробуй это:

@Html.DropDownListFor(model=>model.SelectedStudio, new SelectList(Model.Studios, "Id", "Name", Model.Studio.Id)
person Matt    schedule 07.06.2014

вот как вы сохраняете значение, выбранное в раскрывающемся списке

        @Html.DropDownList("statussearch", new List<SelectListItem>
                                    {
                                        new SelectListItem { Text = "text1", Value = "1",  Selected = Studio.IsSelected.HasValue ? Studio.IsSelected.Value : false},
                                        new SelectListItem { Text = "text2", Value = "2"},
                                        new SelectListItem { Text = "text3", Value = "3"},
                                    }, "Select Status")

IsSelected - это поле в вашей БД, в котором указано, какое значение будет выбрано.

person Friyank    schedule 07.06.2014
comment
Так что, по сути, это не то, что я могу динамически заполнить (с моделью) и при этом выбрать выбранное значение? Итак, в таком случае, что должен делать последний параметр нового списка выбора? - person ab1428x; 07.06.2014
comment
я использую поле базы данных, потому что ни один разработчик не захочет снова обновлять код только для выбранных значений, последний параметр нового списка выбора предназначен для htmlattribute - person Friyank; 07.06.2014
comment
для значений динамической модели, которые должны быть установлены как selectd u jus, можно заменить строку состояния select на значение модели ur, которое вы хотите выбрать EG @Html.DisplayNameFor(model => model.First().name1).ToString() это работает для динамические значения, которые можно добавить в модель - person Friyank; 07.06.2014
comment
Ну, в основном, я хочу, чтобы это произошло: это представление редактирования, поэтому оно заполняет список выбора существующими студиями, и когда представление загружается, я хотел бы, чтобы выбранная студия была выбрана в раскрывающемся списке, и я подумал, что это возможно через последний параметр списка выбора - person ab1428x; 07.06.2014
comment
studios является собственностью вашей модели? вот и все, используйте html.displaynamefor (укажите свойство вашей модели, приведите его к строке) - person Friyank; 07.06.2014
comment
Studios - это модель, поэтому я попробовал @html.displaynamefor(model=›model.Studios.First().Name).ToString(), однако это просто превратило ее в метку, мне нужно, чтобы Studios был раскрывающимся списком и имел определенная студия из модели Studios, выбранная по умолчанию при загрузке представления - person ab1428x; 07.06.2014
comment
@foreach (значение var в студиях){ @Html.DropDownList(statussearch, новый список‹SelectListItem› {новый SelectListItem { Text = value.prop1, Value = 1}, new SelectListItem { Text = value.prop2, Value = 2}, новый SelectListItem { Text = value.prop3, Value = 3},}, value.proptobeselected)} - person Friyank; 07.06.2014

это будет хорошо работать для вашего требования

    @foreach (var value in studios)
    { @Html.DropDownList("statussearch", new List<SelectListItem> 
    {new SelectListItem {    Text =value.prop1, Value = "1" },new SelectListItem { Text = value.prop2, Value = "2"},new SelectListItem { Text = value.prop3, Value = "3"},}, value.proptobeselected)} 
person Friyank    schedule 07.06.2014
comment
это просто создает отдельный раскрывающийся список для каждого элемента, который у меня есть в студиях. Я предполагаю, что мое единственное решение - создать список выбора перед раскрывающимся списком, а затем использовать его в помощнике раскрывающегося списка. Я просто подумал, что будет проще указать значение, которое я хочу выбрать в самом помощнике, однако у меня с этим проблемы. - person ab1428x; 07.06.2014