MVC DropDownListFor Null值

Chr*_*end 11 c# asp.net-mvc razor

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

这是我的模特:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

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


    }
}
Run Code Online (Sandbox Code Playgroud)

并查看:

    @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>
Run Code Online (Sandbox Code Playgroud)

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

nullselect

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

SBu*_*ris 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; }
}
Run Code Online (Sandbox Code Playgroud)

更新下拉列表控件:

@Html.DropDownListFor(model => model.selectedValue, Model.members, "--Select--")
Run Code Online (Sandbox Code Playgroud)

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

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

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

和/或

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

[HttpPost]
public ActionResult Index(Customer customer, FormCollection collection)
{

  return View();
}
Run Code Online (Sandbox Code Playgroud)