在ASP.Net MVC中,如何使用TryUpdateModel从特定对象进行更新

时间:2010-10-20 21:42:34

标签: asp.net-mvc asp.net-mvc-2

我有一个接收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对象进行调用。实现这个目标的最佳方法是什么?

由于

3 个答案:

答案 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进行恢复。