MVC DropDownListFor Null值

时间:2013-04-17 11:14:24

标签: c# asp.net-mvc razor

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

以下是我的模特:

namespace MvcTestWebApp.Models
{
    public class Customer
    {
        public string name { get; set; }

        public List<SelectListItem> 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<SelectListItem>();

            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;
}

<!DOCTYPE html>

<html>

<head>
    <meta name="viewport" content="width=device-width" />
    <title> Index </title>
</head>

    <body>


@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Customer Data</legend>

          @Html.HiddenFor(model => model.name)

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

        <p>
            <input type="submit" value="Save" />
        </p>

        </fieldset> 
}

    </body>

</html>

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

nullselect

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

3 个答案:

答案 0 :(得分:21)

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

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

新客户类:

public class Customer
{
  public string name { get; set; }

  public List<SelectListItem> 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();
}

答案 1 :(得分:0)

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"} );

答案 2 :(得分:-3)

使用jQuery prepend轻松解决问题。

$("#idOfSelectTag").prepend('
                              <option selected="selected" value="null">
                                -- Select School --
                              </option>
                            ');