【问题标题】:ASP.NET MVC UpdateModel failing unexpectedlyASP.NET MVC UpdateModel 意外失败
【发布时间】:2009-08-26 18:23:13
【问题描述】:

我正在尝试通过调用UpdateModel(myObject, new[] { "stringprop1", "stringprop2", "intprop"}) 来更新一些对象属性。

由于未知原因而失败。几个字符串属性正在成功更新。当我尝试更新 int 属性时,它失败了。新的 int 值是从视图上的 html 选择列表发送的。

我可以从我的 ValueProvider 的视图中看到数据。键与对象的属性名称匹配,值是我对视图的期望(除了它是一个字符串。我认为 UpdateModel 可以处理简单的类型转换。

当我调用 UpdateModel 时,会引发 InvalidOperationException,仅当属性值发生变化时。

另外,该对象是 Linq To Sql 生成的对象。

编辑

在调用 TryUpdateModel 后查看模型状态,我在遇到问题的属性上看到了这个异常:

- Exception {"Operation is not valid due to the current state of the object."} System.Exception {System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException}

我要更新的值是外键。为什么我不能更新这个值?感谢您的帮助?

编辑 2

我发现了这个: http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25

我可以发誓我之前更改了键而不是关联属性,但无论如何。在这种 MVC 模型绑定情况下可以做什么?

【问题讨论】:

    标签: c# .net asp.net-mvc linq linq-to-sql


    【解决方案1】:

    拧紧它。我只是用老式的方式做的:

    myObject.Skunk = db.Skunks.Single(s => s.ID == intprop);
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,然后意识到它是 DataContext 本身。我将其保存在会话中,而不是为每个请求创建一个新的。一旦我为每个请求创建了上下文,这个错误就消失了。

      【讨论】:

      • 我遇到了与您描述的相同的问题,只需实例化一个新的 DataContext 即可解决该问题——但我无法解释原因。有什么想法吗?
      【解决方案3】:

      我在使用 DataLoadOptions 时遇到了这个问题。只需为具有外键的列设置 DLO 就足以导致此错误。我通过在没有 DLO 的情况下创建 DataContext 的新实例来修复它。

      请注意,在更新开始时将具有外键的列中的值设置为null没有任何区别。

      我希望这对遇到类似问题的人有所帮助(这个问题是我尝试自己解决时遇到的第一个结果)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-26
        • 2010-12-14
        相关资源
        最近更新 更多