MVC 5:DropDown值作为控制器方法

时间:2016-05-26 12:39:49

标签: c# asp.net-mvc razor asp.net-mvc-5

我使用下拉菜单和提交按钮构建一个简单的表单。

@using(Html.BeginForm("Index", "Account", FormMethod.Post))
{
    @Html.DropDownList(
        "Roles",
        new SelectList(new List<string> { "User", "Manager", "Chuck Norris" }),
        new { id = "role", name="role" })

    <input type="submit" value="Update" />
}

我的控制器看起来像这样:

[HttpPost]
public ActionResult Index(string role) <-- role is null when clicking submit
{
}

我有点希望下拉列表中的值会自动作为我的控制器方法的参数注入,但事实并非如此。我错过了什么或者根本不可能这样做吗?

2 个答案:

答案 0 :(得分:2)

您使用<select>生成name="Roles"元素,但您的方法参数名为role(不是复数)。您需要更改其中一个以使它们匹配(请注意DefaulModelBinder不区分大小写,因此参数可以是rolesROleS)`

请注意,设置new { name = "role" }不会更改name方法生成的HtmlHelper属性。它也没有必要使用name { id = "role" } - 方法已经生成id="Roles"所以如果你使用javascript / jquery引用元素,那么只需使用$(#Roles')作为选择器

答案 1 :(得分:0)

role更改为Roles,如下面的代码

public ActionResult Index(string role)

public ActionResult Index(string Roles)

现在它会起作用