我有一个列出项目集合的视图。我允许用户从视图中动态添加和删除行。一切正常。我在控制器中添加和删除行,然后将模型发送回视图,
return View("EditPage", Dmodel);
问题是我的一个字段使用下拉列表
<td>@Html.DropDownListFor( m=>m.Order[i].Software, Software())
从我的集合中删除一行并返回到视图后,下拉列表不会为取代已删除行的行选择正确的值。
我注意到这两个模型访问方法返回了不同的值,
m=>m.Order[i].Software --This is wrong
Model.Order[i].Software -- This is correct
看起来lambda表达式正在查看旧数据,但Model正在查看我传递给视图的内容。
有关如何解决此问题的任何想法?
答案 0 :(得分:0)
不使用POST方法返回视图,而是使用重定向,而不是
return View("EditPage", Dmodel);
重定向
return RedirectToAction("EditPage",...);
此模式称为POST-REDIRECT-GET。成功操作后,您应该重定向到GET。
目前现有的ModelState
值与新值相冲突。您删除了模型中的值,但ModelState
仍然保留它们,因此您遇到索引问题。您可以以不同方式修复它,但使用此模式是最佳解决方案。