MVC DropDownListFor Null值

我在使用MVC中的htmlhelper下拉列表时遇到问题。 发布回发时,没有选择任何内容,列表的模型中的值和所选项目为空。

这是我的模特:

namespace MvcTestWebApp.Models { public class Customer { public string name { get; set; } public List members { get; set; } public Member selected { get; set; } } public class Member { public string name { get; set; } } } 

控制器:

 namespace MvcTestWebApp.Models { public class CustomerController : Controller { // // GET: /Customer/ public ActionResult Index() { Customer cust = new Customer() { name = "Cust1" }; cust.members = new List(); cust.members.Add(new SelectListItem(){Text = "Bob"} ); cust.members.Add(new SelectListItem(){Text = "Dave"} ); return View(cust); } [HttpPost] public ActionResult Index(Customer customer) { return View(); } } } 

并查看:

  @model MvcTestWebApp.Models.Customer @{ ViewBag.Title = "Customer"; Layout = null; }      Index    @using (Html.BeginForm()) { @Html.ValidationSummary(true) 
Customer Data @Html.HiddenFor(model => model.name) @Html.DropDownListFor(model => model.selected, Model.members, "--Select--")

}

当我从选择列表中选择一些内容并单击提交按钮时,返回空值:

nullselect

有人能说清楚我做错了吗?

您遇到的问题是MVC不知道如何将下拉列表的选定值(字符串)转换为对象成员。

您应该做的是具有selectedValue属性,该属性用于设置下拉列表中的值并检索返回的值。

新客户类别:

 public class Customer { public string name { get; set; } public List members { get; set; } public string selectedValue { get; set; } public Member selected { get; set; } } 

更新下拉列表控件:

 @Html.DropDownListFor(model => model.selectedValue, Model.members, "--Select--") 

这会将选定的值从下拉列表返回到属性selectedValue。

您的成员列表返回null的原因是HTML不返回下拉列表中的选项,它只返回选定的值。 因此,当信息进入方法时,只给出输入表单的值。

如果要查看将哪些信息发送回服务器,可以使用开发人员控制台捕获返回的Http请求

和/或

您可以将FormCollection collection添加到控制器操作的参数中,以查看MVC用于构建传递给方法的对象的信息。

 [HttpPost] public ActionResult Index(Customer customer, FormCollection collection) { return View(); } 
 cust.members.Add(new SelectListItem(){Text = "Bob"} ); cust.members.Add(new SelectListItem(){Text = "Dave"} ); 

尝试设置值:

 cust.members.Add(new SelectListItem(){Value = "Bob", Text = "Bob"} ); cust.members.Add(new SelectListItem(){Value = "Dave", Text = "Dave"} ); 

使用jQuery prepend轻松解决问题。

 $("#idOfSelectTag").prepend('  ');