我使用下拉菜单和提交按钮构建一个简单的表单。
@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
{
}
我有点希望下拉列表中的值会自动作为我的控制器方法的参数注入,但事实并非如此。我错过了什么或者根本不可能这样做吗?
答案 0 :(得分:2)
您使用<select>
生成name="Roles"
元素,但您的方法参数名为role
(不是复数)。您需要更改其中一个以使它们匹配(请注意DefaulModelBinder
不区分大小写,因此参数可以是roles
或ROleS
)`
请注意,设置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)
现在它会起作用