下拉列表不会在mvc 2中以编辑模式显示所选值

时间:2011-06-23 08:59:09

标签: asp.net-mvc asp.net-mvc-2 view viewdata html.dropdownlistfor

您好我正在尝试在编辑部分的下拉列表中显示数据库值,但下拉列表显示下面的默认设置值是我的代码: 控制器:

 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 个答案:

答案 0 :(得分:1)

一个月前我遇到了同样的问题,我通过这样做解决了这个问题:

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

我的意思是,您必须在SelectedValue中添加第4个参数,您可以在编辑之前从原始值中获取它。您必须仅在编辑操作中执行此操作,不需要在Create中执行此操作,因为它是一个新对象,并且尚未选择任何值。

在您的标记中,您可以像这样定义DropDownList:

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

这样就可以选择所选的值而不是默认值。

希望有所帮助。

修改
创建行动方法:

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

编辑操作方法:

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

“创建”和“编辑”视图中的标记

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