рдпрд╣ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ ASP.NET MVC 3 рд╡рд┐рдХрд╛рд╕ рд▓реЗрдЦ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ рдкрд╣рд▓рд╛ рдЕрдзреНрдпрд╛рдп рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдкрд┐рдЫрд▓реЗ рдкрд╛рдареЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ред рдЕрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗред рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ-рд╕реЗ-рдХрдИ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рд▓рд┐рдП, рдИрдПрдл рд╕реАрдзреЗ рд╢рд╛рдорд┐рд▓ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреБрдгреЛрдВ рд╕реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд░рд┐рдгрд╛рдо рдЪрд┐рддреНрд░рдг рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВред



рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдмрдирд╛рдПрдВ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдкрд╛рдареНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рд╛рд░ рдмрдирд╛рддреЗ рд╕рдордп, рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рд╕рдВрдХрд╛рдп рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдкрджреНрдзрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рд╕рдВрдХрд╛рдп рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдмрдирд╛рдПрдВ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рд╕рдВрдкрддреНрддрд┐ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рдбрд┐рдкрд╛рд░реНрдЯрдореЗрдВрдЯ, рдИрдПрдл рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рднрд╛рдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд╛рдЧ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рдВрдкрддреНрддрд┐ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдФрд░ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдореЗрдВ рдЖрдЗрдЯрдо рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
CourseController.cs рдореЗрдВ, рдПрдбрд┐рдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрджрд▓реЗрдВ рдФрд░ рддрд░реАрдХреЗ рдмрдирд╛рдПрдБ:
public ActionResult Create() { PopulateDepartmentsDropDownList(); return View(); } [HttpPost] public ActionResult Create(Course course) { try { if (ModelState.IsValid) { db.Courses.Add(course); db.SaveChanges(); return RedirectToAction("Index"); } } catch (DataException) { //Log the error (add a variable name after DataException) ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator."); } PopulateDepartmentsDropDownList(course.DepartmentID); return View(course); } public ActionResult Edit(int id) { Course course = db.Courses.Find(id); PopulateDepartmentsDropDownList(course.DepartmentID); return View(course); } [HttpPost] public ActionResult Edit(Course course) { try { if (ModelState.IsValid) { db.Entry(course).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } } catch (DataException) { //Log the error (add a variable name after DataException) ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator."); } PopulateDepartmentsDropDownList(course.DepartmentID); return View(course); } private void PopulateDepartmentsDropDownList(object selectedDepartment = null) { var departmentsQuery = from d in db.Departments orderby d.Name select d; ViewBag.DepartmentID = new SelectList(departmentsQuery, "DepartmentID", "Name", selectedDepartment); }
PopulateDepartmentsDropDownList рдкрджреНрдзрддрд┐ рдирд╛рдо рд╕реЗ рдХреНрд░рдордмрджреНрдз рд╕рднреА рд╕рдВрдХрд╛рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд▓реЛрдб рдХрд░рддреА рд╣реИ, рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдпрди рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рддреА рд╣реИ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ ViewBag рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреА рд╣реИред рд╡рд┐рдзрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдЬреЛ рдХреЙрд▓рд░ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдЗрдЯрдо рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
HttpGet рдмрдирд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдЪрдпрдирд┐рдд рдЖрдЗрдЯрдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ PopulateDepartmentsDropDownList рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд╛рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкрд╛рдареНрдпрдХреНрд░рдо рдЕрднреА рддрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
public ActionResult Create() { PopulateDepartmentsDropDownList(); return View(); }
HttpGet рд╕рдВрдкрд╛рджрди рд╡рд┐рдзрд┐, рд╕рдВрдкрд╛рджрди рдкрд╛рдареНрдпрдХреНрд░рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдХрд╛рдп рдЖрдИрдбреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрдпрдирд┐рдд рдЖрдЗрдЯрдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ:
public ActionResult Edit(int id) { Course course = db.Courses.Find(id); PopulateDepartmentsDropDownList(course.DepartmentID); return View(course); }
рдмрдирд╛рдПрдБ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HttpPost рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
catch (DataException) { //Log the error (add a variable name after DataException) ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator."); } PopulateDepartmentsDropDownList(course.DepartmentID); return View(course);
рдХреЛрдб рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЪрдпрдирд┐рдд рд╕рдВрдХрд╛рдп рдЪрдпрдирд┐рдд рд░рд╣реЗрдЧрд╛ред
рджреГрд╢реНрдп \ рдХреЛрд░реНрд╕ \ рдХреНрд░рд┐рдПрдЯ рдореЗрдВ ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдареНрдпрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╢реАрд░реНрд╖рдХ рдлрд╝реАрд▓реНрдб рд╕реЗ рдкрд╣рд▓реЗ
cshtml рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВред рдкрд╣рд▓реЗ рдпрд╣ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдЧреБрдг рджреГрд╢реНрдп рдкрд░ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдПрдХ рдЕрд░реНрде рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
<div class="editor-label"> @Html.LabelFor(model => model.CourseID) </div> <div class="editor-field"> @Html.EditorFor(model => model.CourseID) @Html.ValidationMessageFor(model => model.CourseID) </div>
Views \ Course \ Edit.cshtml ,
Views \ Course \ Delete.cshtml , рдФрд░
Views \ Course \ Details.cshtml рдореЗрдВ ,
рдкрд╛рдареНрдпрдХреНрд░рдо рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╢реАрд░реНрд╖рдХ рдлрд╝реАрд▓реНрдб рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рд╣реИ, рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕рдВрдкрд╛рджрди рдирд┐рд╖рд┐рджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
<div class="editor-label"> @Html.LabelFor(model => model.CourseID) </div> <div class="editor-field"> @Html.DisplayFor(model => model.CourseID) </div>
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдБ рдФрд░
рдмрдирд╛рдПрдБ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдирдП рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ:
рдХреНрд░рд┐рдПрдЯ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред рдХреЛрд░реНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рд╕рдВрдХрд╛рдп рдХрд╛ рдирд╛рдо рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред
рдПрдбрд┐рдЯ рдкреЗрдЬ рдЦреЛрд▓реЗрдВ (рдХреЛрд░реНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдЦреЛрд▓реЗрдВ рдФрд░ рдХреЛрд░реНрд╕ рдкрд░
рдПрдбрд┐рдЯ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ )ред
![clip_image002 [1] clip_image002[1]](https://habrastorage.org/getpro/habr/post_images/f47/07b/6f9/f4707b6f961363ce77209e21578489ad.png)
рдбреЗрдЯрд╛ рдмрджрд▓реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдХреЛрд░реНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдЕрдкрдбреЗрдЯреЗрдб рдХреЛрд░реНрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрд╛рджрд┐рдд рдкреГрд╖реНрда рдЬреЛрдбрд╝рдирд╛
рдЬрдм рдЖрдк рдПрдХ рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рднреА рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдЗрдХрд╛рдИ OfficeAssignment рдХреЗ рд╕рд╛рде рдПрдХ-рд╕реЗ-рд╢реВрдиреНрдп-рдпрд╛-рд╕реЗ-рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣рдЯрд╛рддрд╛ рд╣реИ, рддреЛ OfficeAssignment рдирд┐рдХрд╛рдп рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдХ рдЧрд▓рдд рдореВрд▓реНрдп рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдИ OfficeAssignment рдЗрдХрд╛рдИ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдп рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд OfficeAssignment рдирд┐рдХрд╛рдп рдХрд╛ рдорд╛рди рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ ред рд╕реАрдПрд╕ HttpGet рд╕рдВрдкрд╛рджрди рд╡рд┐рдзрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
public ActionResult Edit(int id) { Instructor instructor = db.Instructors.Find(id); ViewBag.InstructorID = new SelectList(db.OfficeAssignments, "InstructorID", "Location", instructor.InstructorID); return View(instructor); }
рдЙрддреНрдкрдиреНрди рдХреЛрдб рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ - рдпрд╣ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓реЗрдВ:
public ActionResult Edit(int id) { Instructor instructor = db.Instructors .Include(i => i.OfficeAssignment) .Include(i => i.Courses) .Where(i => i.InstructorID == id) .Single(); return View(instructor); }
рдпрд╣ рдХреЛрдб ViewBag рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд OfficeAssignment рдФрд░ рдХреЛрд░реНрд╕ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред (рдкрд╛рдареНрдпрдХреНрд░рдо рдмрд╛рдж рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗред) рдЖрдк рдлрд╛рдЗрдВрдб рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╢рд┐рдХреНрд╖рдХ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ рдФрд░ рдПрдХрд▓ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдореНрди рдХреЛрдб рдХреЗ рд╕рд╛рде HttpPost рдПрдбрд┐рдЯ рд╡рд┐рдзрд┐ рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВ рдЬреЛ рдХрд╛рд░реНрдпрд╛рд▓рдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ:
[HttpPost] public ActionResult Edit(int id, FormCollection formCollection) { var instructorToUpdate = db.Instructors .Include(i => i.OfficeAssignment) .Include(i => i.Courses) .Where(i => i.InstructorID == id) .Single(); if (TryUpdateModel(instructorToUpdate, "", null, new string[] { "Courses" })) { try { if (String.IsNullOrWhiteSpace(instructorToUpdate.OfficeAssignment.Location)) { instructorToUpdate.OfficeAssignment = null; } db.Entry(instructorToUpdate).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } catch (DataException) { //Log the error (add a variable name after DataException) ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator."); return View(); } } return View(instructorToUpdate); }
рдпрд╣ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
- OfficeAssignment рдФрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдЗрдХрд╛рдИ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдордиреЗ HttpGet рдПрдбрд┐рдЯ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ред
- рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдЗрдХрд╛рдИ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИ:
рдпрджрд┐ (TryUpdateModel (рдкреНрд░рд╢рд┐рдХреНрд╖рдХрдЯреЙрдЙрдкрдбреЗрдЯ, "", рдЕрд╢рдХреНрдд, рдирдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ [] {"рдкрд╛рдареНрдпрдХреНрд░рдо"}))
рдпрджрд┐ рдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ TryUpdateModel рдЧрд▓рдд рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рджреГрд╢реНрдп рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рддрд╛ рд╣реИред - рдпрджрд┐ рдХрд╛рд░реНрдпрд╛рд▓рдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ред рдСрдлреАрд╕рд╕рд╛рдЗрдирдореЗрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП OfficeAssignment рдЯреЗрдмрд▓ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред
if (String.IsNullOrWhiteSpace(instructorToUpdate.OfficeAssignment.Location)) { instructorToUpdate.OfficeAssignment = null; }
- рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬрддрд╛ рд╣реИред
рджреГрд╢реНрдп рдореЗрдВ \ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ \ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ ред Hsh Date рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП div рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмрд╛рдж
cshtml , рдХрд╛рд░реНрдпрд╛рд▓рдп рдХрд╛ рдкрддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ:
<div class="editor-label"> @Html.LabelFor(model => model.OfficeAssignment.Location) </div> <div class="editor-field"> @Html.EditorFor(model => model.OfficeAssignment.Location) @Html.ValidationMessageFor(model => model.OfficeAssignment.Location) </div>
рдкреНрд░рд╢рд┐рдХреНрд╖рдХреЛрдВ рдЯреИрдм рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╢рд┐рдХреНрд╖рдХ рдкрд░
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред
Office рд╕реНрдерд╛рди рдХрд╛ рдорд╛рди рдмрджрд▓реЗрдВ рдФрд░
рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред

рд╕реВрдЪрдХрд╛рдВрдХ рдкреГрд╖реНрда рдкрд░ рдПрдХ рдирдпрд╛ рдкрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЖрдк
рд╕рд░реНрд╡рд░ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ OfficeAssignment рддрд╛рд▓рд┐рдХрд╛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдкреГрд╖реНрда рдкрд░ рд▓реМрдЯреЗрдВ,
рдХрд╛рд░реНрдпрд╛рд▓рдп рд╕реНрдерд╛рди рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдФрд░
рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдПрдХ рд░рд┐рдХреНрдд рдкрддрд╛ рдФрд░
рд╕рд░реНрд╡рд░ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдкреГрд╖реНрда рдкрд░,
Office рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рди рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░
рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред рдПрдХ рдирдпрд╛ рдкрддрд╛ рдорд╛рди
рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░
рд╕рд░реНрд╡рд░ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдПрдбрд┐рдЯ рдкреЗрдЬ рдкрд░ рдХреЛрд░реНрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛
рд╢рд┐рдХреНрд╖рдХ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд╛рдареНрдпрдХреНрд░рдо рдкрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдХрд┐рд╕реА рдХреЛрд░реНрд╕ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдХрд░ рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдПрдбрд┐рдЯ рдкреЗрдЬ рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░реЗрдВрдЧреЗ:
![clip_image003 [1] clip_image003[1]](https://habrastorage.org/getpro/habr/post_images/406/4a6/f48/4064a6f48eaf854c9d7e2e18fbe7fc76.png)
рдХреЛрд░реНрд╕ рдФрд░ рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рдХрдИ-рдХрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рдореЗрдЬ рдпрд╛ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рддрдХ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдХреЛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреЛрд╖рдг рдХрд░рддрд╛ рд╣реИред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдмрдВрдзрди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЪреЗрдХ рдмреЙрдХреНрд╕ рд╕рдореВрд╣ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИред
рдЪреЗрдХ рдмреЙрдХреНрд╕ рдХреЗ рд╕рдореВрд╣ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рджреГрд╢реНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреГрд╢реНрдп рдореЙрдбрд▓ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде
ViewModels рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
AssignCourseData.cs рдмрдирд╛рдПрдБ:
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace ContosoUniversity.ViewModels { public class AssignedCourseData { public int CourseID { get; set; } public string Title { get; set; } public bool Assigned { get; set; } } }
рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ ред рд╕реАрдПрд╕ , HttpGet рдПрдбрд┐рдЯ рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░реЗрдВ рдЬреЛ рдЪреЗрдХ рдмреЙрдХреНрд╕ рд╕рдореВрд╣ рдХреА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреА:
public ActionResult Edit(int id) { Instructor instructor = db.Instructors .Include(i => i.OfficeAssignment) .Include(i => i.Courses) .Where(i => i.InstructorID == id) .Single(); PopulateAssignedCourseData(instructor); return View(instructor); } private void PopulateAssignedCourseData(Instructor instructor) { var allCourses = db.Courses; var instructorCourses = new HashSet<int>(instructor.Courses.Select(c => c.CourseID)); var viewModel = new List<AssignedCourseData>(); foreach (var course in allCourses) { viewModel.Add(new AssignedCourseData { CourseID = course.CourseID, Title = course.Title, Assigned = instructorCourses.Contains(course.CourseID) }); } ViewBag.Courses = viewModel; }
рдирдИ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрд╛рдареНрдпрдХреНрд░рдо рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдИ рдХреЛрд░реНрд╕ рд╢рд┐рдХреНрд╖рдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╢рд┐рдХреНрд╖рдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд╛рдареНрдпрдХреНрд░рдо рд╣реИрд╢рд╕реЗрдЯ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд░рдЦреЗ рдЧрдП рд╣реИрдВред рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХреА рдЧрдИ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рд╣реИред рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕реВрдЪреА ViewBag рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд╕ рдХреА рдЬрд╛рддреА рд╣реИред
рд╕реЗрд╡ рдмрдЯрди рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ: HttpPost рдПрдбрд┐рдЯ рдореЗрдердб рдХреЛрдб рдХреЛ рдЙрд╕ рдХреЛрдб рд╕реЗ рдмрджрд▓реЗрдВ рдЬреЛ рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдкрд╛рдареНрдпрдХреНрд░рдо рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирдП рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
[HttpPost] public ActionResult Edit(int id, FormCollection formCollection, string[] selectedCourses) { var instructorToUpdate = db.Instructors .Include(i => i.OfficeAssignment) .Include(i => i.Courses) .Where(i => i.InstructorID == id) .Single(); if (TryUpdateModel(instructorToUpdate, "", null, new string[] { "Courses" })) { try { UpdateModel(instructorToUpdate, "", null, new string[] { "Courses" }); if (String.IsNullOrWhiteSpace(instructorToUpdate.OfficeAssignment.Location)) { instructorToUpdate.OfficeAssignment = null; } UpdateInstructorCourses(selectedCourses, instructorToUpdate); db.Entry(instructorToUpdate).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } catch (DataException) { //Log the error (add a variable name after DataException) 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); } } } }
рдпрджрд┐ рдХреЛрдИ рдЪреЗрдХ рдмреЙрдХреНрд╕ рдЪрдпрдирд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ UpdateInstructorCourses рдореЗрдВ рдХреЛрдб рдЦрд╛рд▓реА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдкрд╛рдареНрдпрдХреНрд░рдо рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ:
if (selectedCourses == null) { instructorToUpdate.Courses = new List(); return; }
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рднреА рдкрд╛рдареНрдпрдХреНрд░рдо рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдкрд░ рдХреЛрдб рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХреЛрдИ рдХреЛрд░реНрд╕ рдирд╣реАрдВ рд╣реИред рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреЛрд░реНрд╕ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
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); } }
OfficeAssigns рдХреЗ рд▓рд┐рдП Div рдХрдВрдЯреЗрдирд░ рдХреЗ рдареАрдХ рдмрд╛рдж рдЪреЗрдХ рдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде
рджреГрд╢реНрдп рдлрд╝реАрд▓реНрдб рдореЗрдВ
\ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ \ Edit.cshtml рдЬреЛрдбрд╝реЗрдВред
<div class="editor-field"> <table style="width: 100%"> <tr> @{ int cnt = 0; List<ContosoUniversity.ViewModels.AssignedCourseData> courses = ViewBag.Courses; foreach (var course in courses) { if (cnt++ % 3 == 0) { @: </tr> <tr> } @: <td> <input type="checkbox" name="selectedCourses" value="@course.CourseID" @(Html.Raw(course.Assigned ? "checked=\"checked\"" : "")) /> @course.CourseID @: @course.Title @:</td> } @: </tr> } </table> </div>
рдХреЛрдб рддреАрди рд╕реНрддрдВрднреЛрдВ рдХреА рдПрдХ HTML рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдкрд╛рдареНрдпрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдирд╛рдо рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЪреЗрдХ рдмреЙрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдЪреЗрдХ рдмреЙрдХреНрд╕ рдХрд╛ рдПрдХ рд╣реА рдирд╛рдо ("рдЪрдпрдирд┐рдд") рд╣реИ, рдЬреЛ рдПрдХ рд╣реА рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрдХ рдмреЙрдХреНрд╕ рдХрд╛ рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ CourseID рдкрд░ рд╕реЗрдЯ рд╣реИред рдЬрдм рдкреГрд╖реНрда рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рд░рдгреА рдЪрдпрдирд┐рдд рдЪреЗрдХ рдмреЙрдХреНрд╕ рдФрд░ рдХреЛрд░реНрд╕рд┐рдб рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдпреБрдХреНрдд рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рдЪреЗрдХ рдмреЙрдХреНрд╕ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд┐рдХреНрд╖рдХ рдХреЛ рд╕реМрдВрдкреЗ рдЧрдП рдЪреЗрдХ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИред
рд╢рд┐рдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдкрд░ рд▓реМрдЯрддреЗ рд╕рдордп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╕реНрддрдВрдн рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ViewBag рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдЗрдХрд╛рдИ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреБрдг рдореЗрдВ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рджреГрд╢реНрдп \ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ \ Index.cshtml рдореЗрдВ, <th> рдХрд╛рд░реНрдпрд╛рд▓рдп </ th> рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╣реЗрдбрд░ рд╕реЗрд▓ <th> рдкрд╛рдареНрдпрдХреНрд░рдо </ th> рдЬреЛрдбрд╝реЗрдВ:
<tr> <th></th> <th>Last Name</th> <th>First Name</th> <th>Hire Date</th> <th>Office</th> <th>Courses</th> </tr>
рдЙрд╕рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рд╕реЗрд▓ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдПрдХ рдирдпрд╛ рд╕реЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
<td> @{ foreach (var course in item.Courses) { @course.CourseID @: @course.Title <br /> } } </td>
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдБ рдФрд░
рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдБ:

рд╢рд┐рдХреНрд╖рдХ рдкрд░
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред
![clip_image003 [2] clip_image003[2]](https://habrastorage.org/getpro/habr/post_images/406/4a6/f48/4064a6f48eaf854c9d7e2e18fbe7fc76.png)
рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдкрд╛рдареНрдпрдХреНрд░рдо рдмрджрд▓реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╕реВрдЪрдХрд╛рдВрдХ рдкреГрд╖реНрда рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдкрд╛рда-рдкрд░рд┐рдЪрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдиреЗ рд╕рд╛рдзрд╛рд░рдг CRUD рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рдорд╕рд╛рдордпрд┐рдХ рдореБрджреНрджреЛрдВ рд╕реЗ рдирд╣реАрдВ рдирд┐рдкрдЯреЗред рдЕрдЧрд▓рд╛ рдкрд╛рда рд╕рдорд╛рдирддрд╛ рдХреЗ рд╡рд┐рд╖рдп, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред
рдзрдиреНрдпрд╡рд╛рдж
рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ Belotserkovsky рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред