Няма избран елемент в DropDownList в приложението MVC/EF

В момента се опитвам да създам страница за редактиране за MVC приложение, което използва падащ списък, позволяващ на потребителя да редактира местоположението на служител. Разглеждам два сценария: един, при който служителят няма зададено местоположение, и един, при който служителят вече има назначено местоположение. Във втория случай бих искал падащият списък в страницата за редактиране автоматично да избира текущото местоположение в списъка. Списъкът е създаден успешно, но по подразбиране е първата стойност (в този случай празният низ) в SelectList, НЕ текущо избраната стойност. Кодът на контролера за този случай е както следва:

var pairs = db.Locations.Select(x => new { value = x.LocationID, text = x.City }).ToList();
            pairs.Insert(0, (new {value = 0, text = ""}));
            SelectList Locations = new SelectList(pairs,
            "value", "text", pairs.First(x=> x.value == employee.Location.LocationID));
            foreach (SelectListItem item in Locations)
            {
                item.Selected = false;
            }
            foreach (SelectListItem item in Locations)
            {
                if (item.Value == (employee.Location.LocationID.ToString()))
                {
                    Debug.Print("Match Found");
                    item.Selected = true;
                    break;
                }

            }

            ViewBag.Locations = Locations;

Обърнете внимание, че в момента изрично изброявам над списъка и маркирам желаната стойност като избрана. Първоначално използвах претоварването за конструктора SelectList, който взе параметър "selectedValue", но и това не проработи. Също така обърнете внимание на оператора за печат: когато се изпълнява, този ред наистина се отпечатва, което означава, че съответстващата стойност е намерена и маркирана. Той просто не се показва като такъв на страницата.

Кодът в изгледа е както следва:

<div class="form-group">
        @Html.Label("Location", new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("location", ViewBag.Locations as IEnumerable<SelectListItem>)
        </div>
    </div>

Има ли нещо, което пропускам?

Благодаря!


person Tom Kreamer    schedule 26.08.2015    source източник
comment
може би този отговор може да ви помогне stackoverflow.com/questions/27297294/   -  person Daniel Gpe Reyes    schedule 26.08.2015
comment
Опитахте ли просто да направите: @Html.DropDownList(location, ViewBag.Locations)   -  person Andy Poquette    schedule 26.08.2015
comment
Използвате ли модел? Моделът има ли поле, наречено местоположение? Ако е така, това може да причини този проблем.   -  person stephen.vakil    schedule 26.08.2015
comment
Моделът има поле, наречено Местоположение, но е с главна буква L.   -  person Tom Kreamer    schedule 26.08.2015
comment
опитваш ли @Html.DropDownListFor(model => model.Location, ViewBag.Locations as IEnumerable<SelectListItem>)?   -  person JamieD77    schedule 26.08.2015
comment
изчакайте Locations SelectList във вашия контролер ли е? защо е хвърлен като IEnumerable<SelectListItem> според вас?   -  person JamieD77    schedule 26.08.2015
comment
Трябва да покажете модела, към който сте обвързани. От вашия (съжалявам, но ужасен) опит да създадете SelectList изглежда, че вашият модел може да има свойство с име Location, което е сложен обект и не можете да се свържете със сложен обект.   -  person    schedule 27.08.2015


Отговори (1)


Почти съм сигурен, че можете значително да опростите кода си и да получите същия резултат, който искате.

Можете да използвате това във вашия контролер

var Locations = new SelectList(db.Locations, "LocationID", "City");
ViewBag.Locations = Locations;

И според вас просто използвайте DropDownListFor

@Html.DropDownListFor(m => m.Location.LocationID, (SelectList)ViewBag.Locations)
person JamieD77    schedule 26.08.2015
comment
Няма нужда от последния параметър в конструктора SelectList (игнорира се при обвързване към свойство) - но ако Location е сложно свойство, съдържащо LocationID, тогава трябва да бъде @Html.DropDownListFor(m => m.Location.LocationID, (SelectList)ViewBag.Locations) - OP не е показал модела, така че не мога да съм сигурен - person ; 27.08.2015