具有动态行的ViewModel数据

本文关键字:ViewModel 数据 动态 | 更新日期: 2023-09-27 18:19:53

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

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

关于如何解决这个问题有什么想法吗?

具有动态行的ViewModel数据

不要在POST方法中返回视图,而是使用重定向,因此不要使用

return View("EditPage", Dmodel);

重定向

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

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

当前现有的ModelState值与新值冲突。您删除了模型中的值,但ModelState仍然保留这些值,所以在索引方面存在问题。你可以用不同的方式修复它,但使用这种模式是最好的解决方案。