如何在mvc.net中使用“TryUpdateModel”和“User.Identity.GetUserId()”编辑/更新记录?

时间:2016-04-28 04:33:39

标签: asp.net-mvc entity-framework

以下代码可以正常使用

  [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(int? id, string[] selectedCourses)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        var instructorToUpdate = db.Instructors
           .Include(i => i.OfficeAssignment)
           .Include(i => i.Courses)
           .Where(i => i.ID == id)
           .Single();

        if (TryUpdateModel(instructorToUpdate, "",
           new string[] { "LastName", "FirstMidName", "HireDate", "OfficeAssignment" }))
        {
            try
            {
                if (String.IsNullOrWhiteSpace(instructorToUpdate.OfficeAssignment.Location))
                {
                    instructorToUpdate.OfficeAssignment = null;
                }

                UpdateInstructorCourses(selectedCourses, instructorToUpdate);

                db.SaveChanges();

                return RedirectToAction("Index");
            }
            catch (RetryLimitExceededException /* dex */)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
            }
        }
        PopulateAssignedCourseData(instructorToUpdate);
        return View(instructorToUpdate);
    }
    private void UpdateInstructorCourses(string[] selectedCourses, Instructor instructorToUpdate)
    {
        if (selectedCourses == null)
        {
            instructorToUpdate.Courses = new List<Course>();
            return;
        }

        var selectedCoursesHS = new HashSet<string>(selectedCourses);
        var instructorCourses = new HashSet<int>
            (instructorToUpdate.Courses.Select(c => c.CourseID));
        foreach (var course in db.Courses)
        {
            if (selectedCoursesHS.Contains(course.CourseID.ToString()))
            {
                if (!instructorCourses.Contains(course.CourseID))
                {
                    instructorToUpdate.Courses.Add(course);
                }
            }
            else
            {
                if (instructorCourses.Contains(course.CourseID))
                {
                    instructorToUpdate.Courses.Remove(course);
                }
            }
        }
    }

但是我不想从视图中获取id并且我正在使用string id = User.Identity.GetUserId();但只有我的复选框正在更新,而不是其他数据库。  我试过db.Entry(abc).State = EntityState.Modified;但它给出了一个错误。它说,上下文已经在使用中。如何更新两个表?

0 个答案:

没有答案