我很难从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值。
答案 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();
}