Model.State clear()函数导致下拉列表无法绑定

时间:2019-01-03 04:06:43

标签: c# model-view-controller

使用ModelState.Clear();后,HTML帮助程序dropdownlistfor无法正常工作。如果我没有在控制器中包含ModelState.Clear(),那么它将正常工作

这是我的HTML代码

 @Html.DropDownListFor(model => model.Vendors, new 
SelectList(Model.vendors_list, "Entry_Value", "Entry_Value", 
Model.Vendors), "--Please select Vendor--", new { @class = "form-control", 
required = "required" })

删除以下代码

<input type="submit" value="Delete" formaction=@Url.Action("DeleteOthersPartList/" + i) formmethod="post" class="btn btn-danger" onclick="return confirm('Confirm Delete ?')" />

这是单击删除按钮时的我的控制器代码

public ActionResult DeleteOthersPartList(RegisterAL model, int id)
{
   try
   {
      PartList part = new PartList();
      part = model.part_information_List[id];
      model.part_information_List.Remove(part);

      ModelState.Clear();

      return View("New_RegistrationForm", model);
   }        
}

在单击删除按钮之前,我选择如下图所示的值。 enter image description here

单击删除按钮后,下拉列表会跳回到默认值,然后该值实际上不是空白(突出显示是model.Vendors的值)。

enter image description here

我之所以使用ModelState.Clear()的原因是, 下面的例子: 我想删除第二个项目“ asd3” enter image description here

如果我没有添加ModelState.Clear()代码,则将显示以下结果。它将始终删除LAST项。但是我删除的是“ asd3”,但删除了“ asd4”。 我知道可能是因为控制器代码问题,但是我尝试调试,在控制器端,删除了“ asd3”记录,但是当返回View时,它再次出现。然后,我添加ModelState.Clear()代码,回到我的视图,它能够显示“ asd3”已删除,但是它又产生了我上面提到的关于dropdownlist的另一个问题。 enter image description here

我在这里犯错了吗? 因为如果删除ModelState.Clear()代码,它将可以正常工作。

1 个答案:

答案 0 :(得分:0)

如果要从表单获取模型,并且想要操纵来自客户端表单的数据并将其写回到视图中,则需要调用ModelState.Clear()来清理ModelState值。 但是我不认为您需要显示任何新值。因此使用它没有任何意义。实际上它只是重建了您的模型并传递给视图,并且由于您的下拉列表是从模型绑定的,因此它失去了选择的状态并恢复为默认状态值。