Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 使用带有GUID键的实体框架的MVC3绑定嵌套模型_Asp.net Mvc 3_Entity Framework_Nested Forms_Model Binding - Fatal编程技术网

Asp.net mvc 3 使用带有GUID键的实体框架的MVC3绑定嵌套模型

Asp.net mvc 3 使用带有GUID键的实体框架的MVC3绑定嵌套模型,asp.net-mvc-3,entity-framework,nested-forms,model-binding,Asp.net Mvc 3,Entity Framework,Nested Forms,Model Binding,我已经为此奋斗了一整天,但我还是失败了 我可以将问题简化如下: 我有报告,报告有表格。我有每个实体模型。它们的Guid id如下所示 我试图得到一个单一的视图,在这里我可以创建一个报告和一个表单。作为最终目标,我希望能够添加多个表单,但只有一个表单就好了。我的控制器如下: // GET: /AllInOne/Create public ActionResult Create() { ViewBag.PossibleReportBases = repor

我已经为此奋斗了一整天,但我还是失败了

我可以将问题简化如下: 我有报告,报告有表格。我有每个实体模型。它们的Guid id如下所示

我试图得到一个单一的视图,在这里我可以创建一个报告和一个表单。作为最终目标,我希望能够添加多个表单,但只有一个表单就好了。我的控制器如下:

    // GET: /AllInOne/Create

    public ActionResult Create()
    {
        ViewBag.PossibleReportBases = reportBaseRepository.All;
        ViewBag.PossibleCategories = categoryRepository.All;

        var model = new Report {FromDate = DateTime.Now};
        model.Forms.Add(new Form());
        return View(model);
    }

    // POST: /AllInOne/Create

    [HttpPost]
    public ActionResult Create(Report report)
    {
        if (ModelState.IsValid) {
            reportRepository.InsertOrUpdate(report);
            reportRepository.Save();
            return RedirectToAction("Index");
        }
        else
        {
            ViewBag.PossibleReportBases = reportBaseRepository.All;
            ViewBag.PossibleCategories = categoryRepository.All;
            return View();
        }
    }
存储库代码如下所示:

    public void InsertOrUpdate(Report report)
    {
        if (report.Id == default(System.Guid)) {
            // New entity
            report.Id = Guid.NewGuid();
            context.Reports.AddObject(report);
        } else {
            // Existing entity
            context.Reports.Attach(report);
            context.ObjectStateManager.ChangeObjectState(report, EntityState.Modified);
        }
    }
在某个阶段,绑定给了我以下错误: EntityCollection已初始化。在反序列化对象图期间,仅应调用InitializeRelatedCollection方法来初始化新的EntityCollection

我尝试了很多方法来获取这些观点,但没有一种有效


请帮忙。

我想你不必为附加费而烦恼。如果您已从上下文中选择报告,则该报告已被跟踪。您可以像这样简化存储库

   public void InsertOrUpdate(Report report)
    {
        // i prefer Guid.Empty but no big deal
        if (report.Id == default(System.Guid)) {
            // New entity
            report.Id = Guid.NewGuid();
            context.Reports.AddObject(report);
        } 
        context.SaveChanges();
    }

创建视图或保存报告回发到服务器时是否有问题?如果是后者:您能否在
reportRepository.InsertOrUpdate(report)
中显示代码?我100%同意上述观点。然而,问题是如何从一个视图将报表和表单绑定到同一个模型中。由于某些原因,我无法让它们正确绑定。我认为用户浏览器中的网页不会有跟踪上下文。报表作为分离的对象进入控制器。@GWA:您的
报表
对象中的
表单
集合(或引用)(传递到创建post操作中)是否为
?我仍然不明白您到底有什么问题。@Slauma:错误消息:EntityCollection已经初始化。InitializeRelatedCollection方法只应在反序列化对象图期间被调用以初始化新的EntityCollection。@GWA:您应该在问题中编辑异常消息等重要信息,以便其他读者获得完整的概述。模型绑定可能根本不是您的问题。例外情况是,有人在反序列化过程中调用
InitializeRelatedCollection
。如果不是modelbinder,谁应该称之为它?(换句话说:它尝试绑定相关对象,但失败了。)问题很可能是您直接在视图中使用
EntityObject
派生实体(而不是POCO实体或ViewModels)。