Шаблоны формирования

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Поскольку зачастую разработчики вынуждены создавать представления для одних и тех же действий: добавления, изменения, удаления и просмотра записей из БД, то команда разработчиков 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 мы увидим все необходимые представления со всем необходимым кодом, который теперь нам не надо набирать вручную. мы можем запустить проект и перейти в адресной строке браузера к нашему контроллеру, чтобы убедиться, что все работает как надо:

Благодаря шаблонам формирования мы можем не думать о создании кода для стандартных операций. Нам остается после генерации кода лишь изменить автоматически сгенерированные названия на свои (например, название страницы, автоматические генерируемых ссылок и др.)

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850