我有一个接收IList<>的控制器发布操作作为参数,并希望为列表中的每个项迭代该列表和TryUpdateModel。像
[HttpPost]
public ActionResult SaveList(IList<Stuff> listOfStuff)
{
// Get existing list of Stuff objects
IList<Stuff> currentStuff = db.GetStuffList();
// iterate over list of Stuff
foreach (Stuff stuff in listOfStuff)
{
// I'd like to do something akin to this
TryUpdateModel(currentStuff[correspondingItem_to_stuff], stuff);
}
正如您所看到的,我希望能够针对listOfStuff中的每个项目使用TryUpdateModel,但是没有直接的方法可以使用两个Stuff对象进行调用。实现这个目标的最佳方法是什么?
由于
答案 0 :(得分:1)
如果您希望currentStuff与您只需要UpdateModel(currentStuff)的内容列表相同。 UpdateModel用于将发布的http请求相关值复制到对象中,而不是用于复制两个对象的属性。
答案 1 :(得分:0)
UpdateModel和TryUpdateModel必须接收一种ValueProvider(例如FormCollection)。验证控制器或服务层中的发布对象,然后让您的数据库层使用attach()或applycurrentvalues()处理添加/更新(例如,如果您使用实体框架)
答案 2 :(得分:-1)
看起来这不是直接支持的。经过一番搜索后,我找到了几个链接,其中最有用的是
Passing Controller a FormCollection and an IList
这篇文章中还有其他一些有用的链接。不幸的是,我最终自己滚动它,并在保存表单数据失败的情况下使用TempData as detailed here进行恢复。