ASP.MVC ModelBinding行为

时间:2010-02-03 11:30:22

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

尽管这里有很多帖子,但这个让我感到难过。

该场景是一个基本的MVC(2)Web应用程序,具有简单的CRUD操作。每当提交编辑表单并调用UpdateModel()时,都会抛出异常:

  

用户代码未处理System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException

这是针对DropDownList值发生的,DropDownList值是实体表上的外键。但是,表单上还有另一个DropDownList列表,表示另一个外键,它不会抛出错误(不出所料)。在“编辑操作”中手动更改属性值:

Recipe recipe = repository.GetRecipe(int.Parse(formValues["recipeid"]));
recipe.CategoryId = Convert.ToInt32(formValues["CategoryId"].ToString());
recipe.Page = int.Parse(formValues["Page"].ToString());
recipe.PublicationId=Convert.ToInt32(formValues["PublicationId"].ToString());

允许更新CategoryId和Page属性,然后在PublicationId上抛出错误。在db和dbml中检查所有引用完整性。

任何关于此的灯光都会受到欢迎。

2 个答案:

答案 0 :(得分:2)

此错误与模型绑定无关。相反,它与LINQ to SQL严格相关。您可以找到导致其in this post的原因的合理解释。

答案 1 :(得分:0)

使用以下

更改您的代码

而不是

recipe.CategoryId = Convert.ToInt32(formValues["CategoryId"].ToString());

写这个

recipe.Category = db.GetCatById(formValues["CategoryID"]);