MVC - 在不同表单上的POST命令后DropDownList值发生了变化

时间:2016-05-03 15:08:03

标签: asp.net-mvc

我有一个视图,索引,有两种形式,搜索表单和保存表单。它们都将DropDownList控件绑定到同一个Application数据源,但这是他们唯一的共同点。

当我使用POST请求保存数据时,搜索表单中的DDL将更改为与保存表单中的DDL相同的值,这不是我想要的操作。这是我的精简代码:

@model Models.InfoVM

@using (Html.BeginForm("Search", "MyController")) {
    @Html.DropDownList("searchCodes", (IEnumerable<SelectListItem>)Application["Codes"], "--Select--")
}

@using (Html.BeginForm("Save", "MyController")) {
    @Html.DropDownListFor(m => m.Code, (IEnumerable<SelectListItem>)Application["Codes"], Model != null ? Model.Code : "--Select--")
}

我的控制器动作:

[HttpPost]
public ActionResult Save([System.Web.Http.FromBody]InfoVM model) {
    if (ModelState.IsValid) {
        Repository.UpdateInfo(model);
    }
    return View("Index", model);
}

为什么会发生这种情况?如何打破这两者之间的联系呢?由于我没有将搜索表单的DDL绑定到我已绑定到页面的模型,因此我没想到值会发生变化。

1 个答案:

答案 0 :(得分:0)

这是预期的行为。如果模型的值发生更改,则会更改页面上的所有元素。

您应该以两种形式为下拉列表提供不同的模型属性。您可以将元素(而不仅仅是引用它们)复制到另一个变量中。例如。尝试创建CodesForSearch和CodesForSave。使用相同的源填充这两个SelectLists。用自己独立的变量绑定下拉列表。