繁体   English   中英

通过asp.net mvc中的模型绑定更新和删除记录

[英]updating and deleting record through model binding in asp.net mvc

我从存在父级和子级列表的视图中发布模型对象,并且还要从数据库中获取另一个对象,因此我正在比较像

public bool ChildRecords(CheckListTemplate questList)
        {
            int templateId = questList.Id;
            if (templateId > 0 && questList.Questions.Count() > 0)
            {
                var template =DBContext.CheckListTemplates.Include(p => p.Questions).SingleOrDefault(p => p.Id == templateId);
                template.Name = questList.Name;
                List<CheckListQuestion> delQuestions = new List<CheckListQuestion>();
                foreach(CheckListQuestion q in template.Questions)
                {
                    var question = questList.Questions.Where(x => x.Id == q.Id).FirstOrDefault();
                    if (question == null)
                    {
                                               delQuestions.Add(q);
                    }
                    else
                    {
                        q.Question = question.Question;
                        q.Clause = question.Clause;
                    }
                }
                if(delQuestions.Count()>0)
                {
                    foreach(CheckListQuestion qst in  delQuestions)
                    {
                        var itemToRemove = template.Questions.Single(r => r.Id == qst.Id);
                        template.Questions.Remove(qst);
                    }
                }                
DBContext.Entry(template).State = EntityState.Modified;
                DBContext.SaveChanges();
}

我正在更新和删除记录。如果我更新记录功能可以正常工作,但是当我删除记录并发布视图时,则DBContext.Entry(template).State = EntityState.Modified; 提供错误。如何删除记录。代码中缺少的内容。

如果您可以与我们分享错误,那就太好了。 但是查看您的代码,可能遇到的错误是因为您试图删除循环中的某些记录,但这是行不通的。

通过仅将要删除的记录的ID存储在内存中,可以简化代码。 例:

    public bool ChildRecords(CheckListTemplate questList)
    {
        int templateId = questList.Id;
        if (templateId > 0 && questList.Questions.Count() > 0)
        {
            var template = DBContext.CheckListTemplates.Include(p => p.Questions).SingleOrDefault(p => p.Id == templateId);
            template.Name = questList.Name;
            List<int> delQuestions = new List<int>();
            foreach(CheckListQuestion q in template.Questions)
            {
                var question = questList.Questions.Where(x => x.Id == q.Id).FirstOrDefault();
                if (question == null)
                   delQuestions.Add(q.Id);
                else
                {
                    q.Question = question.Question;
                    q.Clause = question.Clause;
                }
            }

            if(delQuestions.Count()>0)
               DBContext.CheckListTemplates.RemoveRange(DBContext.CheckListTemplates.Where(x => ids.Contains(x.Id)));

            DBContext.Entry(template).State = EntityState.Modified;
            DBContext.SaveChanges();
         }
     }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM