В раскрывающемся списке MVC3 не выбран элемент - PullRequest
5 голосов
/ 17 ноября 2011

У меня есть веб-приложение C # .Net MVC3.Я использую выпадающие списки повсюду и добился успеха.Однако есть два, с которыми у меня проблемы.Единственная разница в том, что я создаю SelectLists на лету в коде, а не использую таблицы поиска.Я использую справочные таблицы для всех остальных выпадающих.Когда я QuickWatch SelectLists в коде, правильный элемент имеет значение свойства Selected, установленное на true.Однако при загрузке страницы элемент со свойством Selected не отображается.Первый пунктЕсть идеи?Это один из тех странных.Я пробовал оба способа ниже.В обоих случаях ViewBag.DateToYear и SelectList DateToYear имеют правильные значения и свойства «Выбранные» устанавливаются

1)

// Контроллер

        IList<string> dateToYear = new List<string>();
        for (int i = 0; i < numberYears; i++)
        {
            dateToYear.Add(DateTime.Now.AddYears(i).Year.ToString());
        }
        ViewBag.DateToYear = new SelectList(dateToYear,"2014")

//Вид

        @Html.DropDownList("DateFromYear", (SelectList)ViewBag.DateToYear )

2) // Контроллер ЖЕ, как указано выше

// Вид

List<SelectListItem> DateToYear = new List<SelectListItem>();
foreach (var m in ViewBag.DateToYear)
{
    DateToYear.Add(new SelectListItem { Selected = @m.Selected, Value = @m.Text, Text = @m.Text });
} 

@Html.DropDownList("DateFromYear", DateToYear)

Ответы [ 3 ]

6 голосов
/ 17 ноября 2011

Проблема в том, что SelectList работает как задумано. Баг в дизайне. Вы можете установить Selected Property в SelctedItem, но это будет полностью проигнорировано, если вы пройдете по списку с помощью GetEnumerator () (или если Mvc сделает это за вас). Вместо этого Mvc создаст новые элементы SelectfListItems.

Вы должны использовать ctor SelectList с SelectListItem [], Text-Name, Value-Name и SelectedValue. Будьте внимательны, чтобы передать в качестве SelectedValue ЗНАЧЕНИЕ SelectListItem, которое вы хотите выбрать, а не сам SelectListItem! Пример:

Почему бы просто не сделать это в контроллере?

Псевдокод:

// контроллер

ViewBag.DateToYear = new SelectList(new[]  
{ 
 new SelectListItem { Text = "10", Value = "10" }, 
 new SelectListItem { Text = "15", Value = "15" } 
 new SelectListItem { Text = "25", Value = "25" }, 
 new SelectListItem { Text = "50", Value = "50" }, 
 new SelectListItem { Text = "100", Value = "100" }, 
 new SelectListItem { Text = "1000", Value = "1000" }, 
}, "SomeText", "Value", "15");

Второй вариант должен быть выбран.

5 голосов
/ 17 ноября 2011

Не уверен, что это так, но у меня была проблема с выпадающими списками, которые не были выбраны несколько дней назад.

Моя проблема была: у меня есть @model.Options, и я создал @html.dropdownlist("Options", @model.Options, [...]).Однако, потому что у них было то же имя, это как-то противоречило.Когда я использовал @html.dropdownlist("anythingElse", @model.Options, [...]), он работал нормально.

Когда я QuickWatched return View(model), казалось, что выбранные опции тоже были установлены правильно, поэтому потребовалось некоторое время, чтобы понять это.Может быть, у вас такая же проблема?

0 голосов
/ 12 августа 2012

То же самое происходило и со мной, убедитесь, что вы не присваиваете тот же идентификатор, что и имя свойства, которое вы указали в своей модели. Вот так я решил эту проблему ...

...