ASP.NET MVC下拉列表在发布后在浏览器中保留所选值

时间:2010-05-19 15:35:18

标签: asp.net-mvc model-view-controller

我在我的aspx页面中构建了一个下拉列表,如下所示

<%= Html.DropDownList("SelectedRole", new SelectList((IEnumerable)Model.roles, "RoleId", "RoleName", Model.SelectedRole), "")%>

它适用于第一个Get并且选择了第一个默认值;然后我从下拉列表中选择项目并提交表格。

控制器正确绑定值

public ActionResult About([Bind] Roles r)
{
    //r.SelectedRole = the selected value in the page.
    //Roles r = new Roles();
    r.roles = new List<Role>();
    r.roles.Add(new Role(1, "one"));
    r.roles.Add(new Role(2, "two"));
    r.roles.Add(new Role(3, "three"));
    r.roles.Add(new Role(4, "four"));
    r.SelectedRole = null;
    return View(r)
}

然后我使所选项目无效并返回我的视图,但仍然选择了之前选择的项目(虽然我确实将其取消)

任何想法,如果我做错了或MVC中的错误?

我正在使用ASP.NET MVC 1

由于

1 个答案:

答案 0 :(得分:2)

这是所有html帮助程序的正常行为:它们将查看POSTed值以执行绑定。这意味着您无法更改控制器操作中的值,并且如果您使用标准帮助程序,则希望它反映在视图上。如果POST中有值SelectedRole,则始终使用此值,并且完全忽略下拉列表的最后一个参数。

您可以编写自己的帮助程序来实现此目的,或在POST后重定向。