如何从Controller(MVC 2)中的下拉列表中获取所选值

时间:2011-06-15 10:23:39

标签: asp.net-mvc asp.net-mvc-2 drop-down-menu

我很难从mvc中的硬编码下拉列表中获取所选值,下面是代码:

查看:

<tr><td>No of Helmets</td><td><div class="editor-field">

                <%: Html.DropDownList("helmets", (SelectList)ViewData["size"], "--select--")%>
                </div></td></tr>

                 <tr><td>No of Garages</td><td><div class="editor-field">
                 <%: Html.DropDownList("garages", (SelectList)ViewData["garages"], "--select--")%>

控制器:

//头盔下拉列表

 [HttpPost]
    public ActionResult Create(Event trackday, FormCollection formValues)
    {Product product = new Product();//
        ViewBag.mode = "create";

        // for dropdown track
        ITrackRepository trackResp = new TrackRepository();
        IQueryable<Object> tracks = trackResp.GetVenuesSelectlist();
        ViewData["Venue"] = new SelectList(tracks, "VenueID", "Name");
       var helmets = Enumerable.Range(1, 200).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
        ViewData["helmets"] = new SelectList(helmets.ToList(), "Value", "Text");

        // dropdown for garages
        var garages = Enumerable.Range(1, 50).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
        ViewData["garages"] = new SelectList(garages.ToList(), "Value", "Text");  product.QtyAvailable = Convert.ToInt32(formValues["garages"]);


        if (ModelState.IsValid)
        {
            trackday.DateAdded = DateTime.Now;
            trackday.DateModified = DateTime.Now;
          //  productResp.Save();//
         //  trackday.Products.Add(product);
            trackdayResp.Add(trackday);
            trackday.Products.Add(product);
            trackdayResp.Save();
            return RedirectToAction("Index");
        }
        else
        {
            return View();
        }


    }`

如何在mvc post controller中获取上述2下拉列表的Selected值。

1 个答案:

答案 0 :(得分:3)

如果您调试行动并查看formValues词典,您已经将下拉列表称为“头盔”和“车库”,您应该看到这两个值。

或者您可以将模型更改为具有int类型的“Helmets”和“Garages”属性?模型绑定器应该填充这些值。

或者您可以将操作更改为:

public ActionResult Create(Event trackday, int? helmets, int? garages, FormCollection formValues)

这应填充下拉列表的id(选定值)。

更新

这是我的代码,它从集合或传递的属性中获取值:

HTML:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  <h2><%: ViewData["helmetsCollectionValue"]%></h2>
  <h2><%: ViewData["helmetsProperty"]%></h2>
  <h2><%: ViewData["garagesCollectionValue"]%></h2>
  <h2><%: ViewData["garagesProperty"]%></h2>
  <% using (Html.BeginForm()) { %>
  <p>
    <%: Html.DropDownList("helmets", (SelectList)ViewData["size"], "--select--")%>
  </p>
  <p>
    <%: Html.DropDownList("garages", (SelectList)ViewData["garages"], "--select--")%>
  </p>
  <p>
    <input type="submit" value="Submit" />
  </p>
  <% } %>
</asp:Content>

控制器:

public ActionResult Index()
{
    var helmets = Enumerable.Range(1, 200).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
    ViewData["helmets"] = new SelectList(helmets.ToList(), "Value", "Text");

    // dropdown for garages
    var garages = Enumerable.Range(1, 50).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
    ViewData["garages"] = new SelectList(garages.ToList(), "Value", "Text");

    return View();
}

[HttpPost]
public ActionResult Index(FormCollection collection, int? helmets, int? garages)
{
    ViewData["helmetsCollectionValue"] = collection["helmets"];
    ViewData["helmetsProperty"] = helmets;
    ViewData["garagesCollectionValue"] = collection["garages"];
    ViewData["garagesProperty"] = garages;

    var helmetsList = Enumerable.Range(1, 200).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
    ViewData["helmets"] = new SelectList(helmetsList.ToList(), "Value", "Text");

    // dropdown for garages
    var garagesList = Enumerable.Range(1, 50).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() });
    ViewData["garages"] = new SelectList(garagesList.ToList(), "Value", "Text");

    return View();
}