MVC-DropDownList值在POST命令之后在不同的表单上发生了更改



我有一个View,Index,它有两个表单,一个搜索表单和一个保存表单。它们都有绑定到同一应用程序数据源的DropDownList控件,但这是它们唯一的共同点。

当我使用POST请求保存数据时,搜索表单中的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绑定到我绑定到页面的Model,所以我不希望值发生更改。

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

下拉列表应有两种不同的模型属性。您可以将这些元素(而不仅仅是引用相同的元素)复制到不同的变量中。例如,尝试创建CodesForSearch和CodesForSave。使用相同的源填充这两个SelectList。将下拉列表与它们自己的单独变量绑定。

最新更新