11

我在 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>

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

空选择

谁能阐明我做错了什么?

4

3 回答 3

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();
}
于 2013-04-17T11:51:10.927 回答
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"} );
于 2013-04-17T11:32:24.460 回答
-4

使用 jQuery prepend 轻松解决问题。

$("#idOfSelectTag").prepend('
                              <option selected="selected" value="null">
                                -- Select School --
                              </option>
                            ');
于 2015-07-03T07:56:56.320 回答