【问题标题】:Update model child collection in MVC 3 application?在 MVC 3 应用程序中更新模型子集合?
【发布时间】:2011-02-25 15:06:25
【问题描述】:

这是困扰我一段时间的更大问题的一部分(请参阅"EntityCollection already initialized" error with entity as model in Asp.Net MVC? 了解整个图片)。

但是我找到了一个网站,其中有人遇到了类似的问题,并且显然解决了他的需要(请参阅http://codeblog.shawson.co.uk/creating-an-order-order-details-style-form-using-asp-net-mvc2-entity-framework/)。我试过了,但必须进行一些修改以适应我的代码,以及 Steven Sanderson 的教程提供的辅助方法(参见上一篇文章)。

我看起来很接近,但并不完全:

        UpdateModel(consultant, "Consultant");

        if (vm.Programs != null) //Unnecessary? Can it even be null if it's initialized from the model?
            for (int i = 0; i < vm.Programs.Count; i++)
            {
                Program formProgram = vm.Programs[i];
                Program modelProgram = consultant.Programs.SingleOrDefault(x => x.Id == formProgram.Id);
                if (modelProgram == null)
                    _repository.AddProgram(formProgram);
                else
                    modelProgram = formProgram;
                UpdateModel(modelProgram); //Doesn't work. The modelProgram object does get updated with the correct property values, but it isn't saved to the repository...
            }
        _repository.Save();

尽管这遵循了上面网站上的示例,并且 modelProgram 确实使用更改的属性进行了更新,但这些值不会保存到 Consultant 对象上的 _repository.Save() 上的数据库中,即使 modelProgram 对象是对顾问程序对象的引用...我做错了什么?

顺便说一下,如果不清楚的话,我正在使用实体框架。

(顺便说一句,如果有人对上一个问题和整个图片有任何意见,那也将受到欢迎,但仍未解决)。

请帮忙,我对 MVC 失去了信心,我最近很兴奋...

更新:这里显然有一个错误:UpdateModel 实际上并没有进行任何更新,我只是为 modelProgram 引用了一个不同的对象(视图模型中的那个),所以它当然具有正确的属性值。我仍然想知道如何实现这一点......

【问题讨论】:

  • @everyone:我最终尝试了其他东西,使用 AutoMapper。我为它创建了一个新问题:stackoverflow.com/questions/5126603/…。我实际上让它工作了,但我对代码并不满意,所以如果有人有比我自己提供的答案更好的方法,我会为这个和那个问题表示赞赏!

标签: asp.net entity-framework asp.net-mvc-3 updatemodel


【解决方案1】:

尝试在 for 循环中移动 _repository.Save()。

你的内心是否正确?当 modelProgram 为 null 时,您正在运行 UpdateModel(null)。这可能会崩溃并解释为什么没有保存任何内容。

编辑

尝试放入 {}

            if (modelProgram == null)
               {
                 _repository.AddProgram(formProgram);
               }
            else                    
              {
                modelProgram = formProgram;                
                UpdateModel(modelProgram); 
               }

【讨论】:

  • 没什么区别。请参阅上面的更新 - UpdateModel 根本没有做任何事情,而 modelProgram = formProgram 完全是错误的......所以我仍然很难过。
  • 也没有任何区别,似乎整个视图中的结构都是错误的。现在使用 AutoMapper,请参阅上面的评论。
猜你喜欢
  • 1970-01-01
  • 2012-04-24
  • 2011-06-30
  • 1970-01-01
  • 2012-08-29
  • 2011-08-25
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多