我有一个视图,索引,有两种形式,搜索表单和保存表单。它们都将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绑定到我已绑定到页面的模型,因此我没想到值会发生变化。
答案 0 :(得分:0)
这是预期的行为。如果模型的值发生更改,则会更改页面上的所有元素。
您应该以两种形式为下拉列表提供不同的模型属性。您可以将元素(而不仅仅是引用它们)复制到另一个变量中。例如。尝试创建CodesForSearch和CodesForSave。使用相同的源填充这两个SelectLists。用自己独立的变量绑定下拉列表。