MVC DropDownListFor空值(MVC DropDownListFor Null Val

2019-08-31 09:43发布

我使用MVC中的dropdownlistfor的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>

当我从选择列表中的东西并点击提交返回按钮空值:

任何人都可以阐明我做错了一些轻?

Answer 1:

你碰到的问题是,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();
}


Answer 2:

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


Answer 3:

使用jQuery预先准备能够轻松解决这个问题。

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


文章来源: MVC DropDownListFor Null Values