id没有通过(MVC下拉列表+ viewdata选择列表)

时间:2014-09-08 08:15:37

标签: c# asp.net-mvc html.dropdownlistfor

我的观点:

@using (Html.BeginForm("Index", "Person"))
{
    @Html.DropDownList("Departments",ViewData["Departments"] as SelectList)
    <button type="submit">Select</button>
}

我的部门控制器:

 public ActionResult Index()
        {
            ViewData["Departments"] = new SelectList(db.Departments, "ID", "Name");
            return View();
        }

我的PersonController

 public ActionResult Index(string id = null)
        {

            if (id != null)
            {
            //Return list of persons with department id
            }
          return View();
        }

我的问题: 当我从DropDown中选择一个部门并按下按钮时,它会重定向,但不会传递id。 我错过了什么?我猜它与我如何填充DropDownList有关? 无论如何,一如既往地提前谢谢

2 个答案:

答案 0 :(得分:4)

您的下拉列表的name属性不是&#34; id&#34;所以MVC模型绑定器不能绑定它。 将html属性new {@Name =&#39; id&#39;}添加到您的DropDown定义中,它应该可以正常工作。

我还建议你的视图接收一个模型 - 在这种情况下,模型绑定会更容易,你可以使用DropDownFor帮助。

使用模型还可以避免使用不推荐使用的ViewData和ViewBag容器,因为它们没有强类型,所以如果您错误地在View中找到了ViewData [&#34; Departnents&#34;],那么因为拼写错误而得到编译错误,但很明显它不会起作用。

相反,您可以定义模型

public class Person
{
    public SelectList Departments {get; set;}

    public int SelectedDepatrmentId {get; set;}

    //Other person properties come here

}

在你的视图中,你应该做的唯一一件事就是:

@model path to your Person class

@Html.DropDownListFor(model => model.SelectedDepatrmentId, Model.Departments)

答案 1 :(得分:1)

在您的情况下使用名称属性和@Html.DropDownList("Departments"...完成mvc模型绑定的问题将使用名称为'Departments'的下拉列表呈现html,因此请尝试我的第一个答案或更改@Html.DropDownList("Departments"...如我的第二个回答所示。

试试这个:

public ActionResult Index(string Departments) // <------ Use 'Departments' here instead of 'id'
 {
    .....
    return View();
 }

或者将dropdownlist更改为:

  @Html.DropDownList("id",ViewData["Departments"] as SelectList)