Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Поскольку зачастую разработчики вынуждены создавать представления для одних и тех же действий: добавления, изменения, удаления и просмотра записей из БД, то команда разработчиков MVC внедрила такую полезную функцию, как шаблоны формирования (scaffolding templates). Эти шаблоны позволяют по заданной модели и контексту данных сформировать всю необходимую разметку для представлений и контроллера, с помощью которых можно управлять записями в БД.
Тут надо сразу оговориться, что для корректного применения шаблонов формирования надо, чтобы использовалась одна из связок MVC 4 + EntityFramework 5 или MVC 5 + Entity Framework 6.
Итак, применим шаблон формирования. Добавим новый контроллер. В окне создания нового контроллера установим следующие параметры:
В секции Template нам предлагается выбрать шаблон формирования кода. По умолчанию нам доступны следующие шаблоны:
Empty MVC Controller. Этот шаблон добавляет в папку Controllers класс, производный от класса Controller с указанным именем. Единственное действие, которое выполняет этот контроллер - это действие Index, которое по умолчанию не заключает никакого функционала. Данный шаблон не создает представлений
MVC Controller with Empty Read/Write Actions. Этот шаблон добавляет в проект контроллер, который содержит методы Index, Details, Create, Edit и Delete. Однако эти методы фактически никакой полезной работы не выполняют, и необходимо самим создать для них код и представления для каждого из этих методов.
MVC Controller with Read/Write Actions and Views, Using Entity Framework. Этот шаблон создает контроллер с методами Index, Details, Create, Edit и Delete, а также все необходимые представления для этих действий и добавляет код для извлечения информации из базы данных. Что очень полезно, так как нам не надо писать соответствующий код, как в предыдущем разделе.
Empty API Controller. Этот шаблон пустой контроллер, производный от класса ApiController. Класс ApiController был введен в MVC 4 и используется в проектах типа Web API - своего рода веб-служб.
API Controller with Empty Read/Write Actions. Этот шаблон добавляет в проект контроллер, производный от класса ApiController, который содержит методы Index, Details, Create, Edit и Delete.
API Controller with Read/Write Actions and Views, Using Entity Framework
Этот шаблон, также как и в случае с обычным контроллером, создает контроллер, только в данном случае производный от класса ApiController, который содержит методы Index, Details, Create, Edit и Delete, а также все необходимые представления для этих действий.
В нашем случае мы выбираем пункт MVC Controller with Read/Write Actions and Views, Using Entity Framework.
Далее нам будет предложено выбрать в поле Model class модель, на основе которой будут создаваться представления. Выберем созданную ранее модель Book (либо какую-то другую имеющуюся модель).
В завершении в поле Data context class надо выбрать класс контекста данных, с помощью которого мы получаем все данные модели из БД. В нашем случае - это ранее созданный класс BookContext.
Установив все необходимые параметры, нажмем кнопку Add, и в проект будет добавлен новый контроллер. Он будет выглядеть примерно следующим образом:
using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using BookStoreApp.Models; namespace BookStoreApp.Controllers { public class BookController : Controller { private BookContext db = new BookContext(); // // GET: /Book/ public ActionResult Index() { return View(db.Books.ToList()); } // // GET: /Book/Details/5 public ActionResult Details(int id = 0) { Book book = db.Books.Find(id); if (book == null) { return HttpNotFound(); } return View(book); } // // GET: /Book/Create public ActionResult Create() { return View(); } // // POST: /Book/Create [HttpPost] public ActionResult Create(Book book) { if (ModelState.IsValid) { db.Books.Add(book); db.SaveChanges(); return RedirectToAction("Index"); } return View(book); } // // GET: /Book/Edit/5 public ActionResult Edit(int id = 0) { Book book = db.Books.Find(id); if (book == null) { return HttpNotFound(); } return View(book); } // // POST: /Book/Edit/5 [HttpPost] public ActionResult Edit(Book book) { if (ModelState.IsValid) { db.Entry(book).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(book); } // // GET: /Book/Delete/5 public ActionResult Delete(int id = 0) { Book book = db.Books.Find(id); if (book == null) { return HttpNotFound(); } return View(book); } // // POST: /Book/Delete/5 [HttpPost, ActionName("Delete")] public ActionResult DeleteConfirmed(int id) { Book book = db.Books.Find(id); db.Books.Remove(book); db.SaveChanges(); return RedirectToAction("Index"); } protected override void Dispose(bool disposing) { db.Dispose(); base.Dispose(disposing); } } }
А в папке Views/Book мы увидим все необходимые представления со всем необходимым кодом, который теперь нам не надо набирать вручную. мы можем запустить проект и перейти в адресной строке браузера к нашему контроллеру, чтобы убедиться, что все работает как надо:
Благодаря шаблонам формирования мы можем не думать о создании кода для стандартных операций. Нам остается после генерации кода лишь изменить автоматически сгенерированные названия на свои (например, название страницы, автоматические генерируемых ссылок и др.)