具有动态行的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正在查看我传递给视图的内容。
关于如何解决这个问题有什么想法吗?
不要在POST方法中返回视图,而是使用重定向,因此不要使用
return View("EditPage", Dmodel);
重定向
return RedirectToAction("EditPage",...);
这种模式被称为POST-REDECT-GET。操作成功后,您应该重定向到GET。
当前现有的ModelState
值与新值冲突。您删除了模型中的值,但ModelState
仍然保留这些值,所以在索引方面存在问题。你可以用不同的方式修复它,但使用这种模式是最好的解决方案。