具有动态行的ViewModel数据

时间:2013-06-25 13:44:46

标签: c# asp.net-mvc lambda viewmodel

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

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

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

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

return View("EditPage", Dmodel);

重定向

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

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

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