Выпадающий список не показывает выбранное значение в режиме редактирования в MVC 2 - PullRequest
0 голосов
/ 23 июня 2011

Привет. Я пытаюсь отобразить значение базы данных в раскрывающемся списке в разделе редактирования, но в раскрывающемся списке показано значение по умолчанию, установленное ниже. Мой код: Контроллер:

 public ActionResult Edit(int id)
    {
       // Product helmet = new Product();//
        //Product garrage = new Product();

        ViewBag.mode = "edit";
        // for dropdown track
        ITrackRepository trackResp = new TrackRepository();
        IQueryable<Object> tracks = trackResp.GetVenuesSelectlist();
        ViewData["Venue"] = new SelectList(tracks, "VenueID", "Name");

        // for dropdown for event type
        ITrackdayRepository trackdayResp = new TrackdayRepository();
        IQueryable<EventType> eventTypes = trackdayResp.GetAllEventTypes();
        ViewData["EventTypes"] = new SelectList(eventTypes, "ID", "Name");

        // for dropdown experience
        IExperienceLevelRepository expLevelResp = new ExperienceLevelRepository();
        IQueryable<ExperienceLevel> expLevel = expLevelResp.GetAllExperienceLevels().OrderBy(ExperienceLevel => ExperienceLevel.Name);
        ViewData["Experience"] = new SelectList(expLevel, "ID", "Name");

        // dropdown for helmets
        IProductRepository prodResp = new ProductRepository();
        Product productQuantity = prodResp.GetProd(id);

        if (productQuantity.ProductTypeID == 1)
        {
            // dropdown for attendees
            var attendees = Enumerable.Range(1, 80).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
            ViewData["attendees1"] = new SelectList(attendees, "Value", "Text",**productQuantity.QtyAvailable)**; //productQuantity.QtyAvailable is the value from db(selected value of dropdown)

            ViewData["txtAttendees"] = productQuantity.UnitCost;
        }


        else
        {
            var emptyattendees = Enumerable.Range(1, 80).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
            ViewData["attendees1"] = new SelectList(emptyattendees.ToList(), "Value", "Text");


        }    Event trackday = trackdayResp.GetEvent(id); //returns all the values from event table whose eventid is id

        //need to return product quantity, value to drop downlist
       return View("Create", trackday);

    }

Просмотр изменен (WOrking):

  <% if (ViewBag.mode != "edit")
                  { %>

                <%: Html.DropDownList("attendees1", ViewData["attendees1"] as SelectList, "--select--")%>
               <%}else{%>
               <%: Html.DropDownList("attendees1")%>
               <%} %>

1 Ответ

1 голос
/ 23 июня 2011

У меня была такая же проблема месяц назад, и я решил ее, выполнив следующее:

ViewData["attendees1"] = new SelectList(attendees, "Value", "Text", productQuantity.QtyAvailable);

Я имею в виду, вам нужно добавить 4-й параметр с SelectedValue, который вы берете из исходного значения перед редактированием. Это нужно делать только в действии «Редактировать», в «Создать» это не нужно, поскольку это новый объект и значение еще не выбрано.

И в вашей разметке вы определяете DropDownList следующим образом:

<%: Html.DropDownList("attendees1") %>

Таким образом, выбранное значение будет выбрано вместо значения по умолчанию.

Надеюсь, это поможет.

EDIT:
Создать метод действия:

ViewData["attendees1"] = new SelectList(attendees, "Value", "Text");

Изменить метод действия:

ViewData["attendees1"] = new SelectList(attendees, "Value", "Text", productQuantity.QtyAvailable);

Разметка в представлениях Создать и Редактировать

<%: Html.DropDownList("attendees1") %>
...