0

我有一个列出项目集合的视图。我允许用户从视图中动态添加和删除行。这一切都很好。我在控制器中添加和删除行,然后将模型发送回视图,

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 正在查看我传递给视图的内容。

有想法该怎么解决这个吗?

4

1 回答 1

0

而不是在 POST 方法中返回视图,而是使用重定向,所以而不是

return View("EditPage", Dmodel);

重定向

return RedirectToAction("EditPage",...);

这种模式称为 POST-REDIRECT-GET。成功操作后,您应该重定向到 GET。

当前现有ModelState值与新值冲突。您删除了模型中的值,但ModelState仍保留它们,因此您遇到了索引问题。您可以以不同的方式修复它,但使用这种模式是最好的解决方案。

于 2013-06-25T17:47:40.353 回答