循环引用

问题描述:

我已经阅读了很多关于这种类型的错误:循环引用

“时检测到循环引用而序列化的对象类型...“ 但是,当它发生在ASP.Net MVC Kendo网格操作方法中时,我找不到解决方案。我有以下的操作方法,我想在同一时间插入到另一个相关的表:

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult SeasonTradeCreate([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<BKP_STRADE> models, decimal? DOC_SEQ) 
     { 
      if (models.Any()) 
      { 
       foreach (BKP_STRADE modelItem in models) 
       { 
        Db.BKP_STRADE.Add(modelItem); 
        BKP_STRADE_ROW BKP_STRADE_ROW_OBJ = new BKP_STRADE_ROW(); 
        BKP_STRADE_ROW_OBJ.BSTR_BSTR_SEQ = modelItem.BSTR_SEQ; 
        BKP_STRADE_ROW_OBJ.DOC_SEQ = DOC_SEQ; 
        Db.BKP_STRADE_ROW.Add(BKP_STRADE_ROW_OBJ); 
       } 
       Db.SaveChanges(); 
      } 
      return Json(models.ToDataSourceResult(request, ModelState)); 
     } 

的事情是,它插入到两个表正常,但我在手术后得到了下面的错误,以及:

“序列化类型为'Tpph.Models.BKP_STRADE'的对象时检测到循环引用。”

+0

这意味着BKP_STRADE集合引用自身的实体之一。 JS序列化程序的默认设置无法处理。有关更多信息,请参阅https://*.com/questions/1153385/a-circular-reference-was-detected-while-serializing-an-object-of-type-subsonic。 –

+0

那我该怎么办?我只想在调用剑道网格的create action方法时插入两个相关的实体。我该怎么做 ? –

+0

@AliRoshanbin:不要将**对象**链接到彼此,而应该只存储他们的** ID **。序列化器试图序列化整个对象,但它试图序列化'myObj1','myObj1.RelatedObj2','myObj1.RelatedObj2.RelatedObj1','myObj1.RelatedObj2.RelatedObj1.RelatedObj2' ,等等...... – Flater

你能不能改

return Json(models.ToDataSourceResult(request, ModelState)); 

与此

return Json(new[] { models }.ToDataSourceResult(request, ModelState)); 
+0

感谢您的回答,但我仍然收到相同的错误: “序列化类型为'Tpph.Models.BKP_STRADE'的对象时检测到循环引用。” –

+0

你可以添加你的视图代码吗? –

+0

我的看法没有任何错误。它只是一个简单的Kendo Grid,带有基本选项。 –