使用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);
}
}
单击删除按钮后,下拉列表会跳回到默认值,然后该值实际上不是空白(突出显示是model.Vendors的值)。
我之所以使用ModelState.Clear()的原因是,
下面的例子:
我想删除第二个项目“ asd3”
如果我没有添加ModelState.Clear()代码,则将显示以下结果。它将始终删除LAST项。但是我删除的是“ asd3”,但删除了“ asd4”。
我知道可能是因为控制器代码问题,但是我尝试调试,在控制器端,删除了“ asd3”记录,但是当返回View时,它再次出现。然后,我添加ModelState.Clear()代码,回到我的视图,它能够显示“ asd3”已删除,但是它又产生了我上面提到的关于dropdownlist的另一个问题。
我在这里犯错了吗? 因为如果删除ModelState.Clear()代码,它将可以正常工作。
答案 0 :(得分:0)
如果要从表单获取模型,并且想要操纵来自客户端表单的数据并将其写回到视图中,则需要调用ModelState.Clear()来清理ModelState值。 但是我不认为您需要显示任何新值。因此使用它没有任何意义。实际上它只是重建了您的模型并传递给视图,并且由于您的下拉列表是从模型绑定的,因此它失去了选择的状态并恢复为默认状态值。