Учебники

ASP.NET MVC — строительные леса

ASP.NET Scaffolding — это структура генерации кода для веб-приложений ASP.NET. Visual Studio 2013 включает в себя предварительно установленные генераторы кода для проектов MVC и Web API. Вы добавляете леса в свой проект, когда хотите быстро добавить код, взаимодействующий с моделями данных. Использование строительных лесов может сократить время разработки стандартных операций с данными в вашем проекте.

Как вы видели, мы создали представления для действий Index, Create, Edit, а также должны обновить методы действий. Но ASP.Net MVC предоставляет более простой способ создания всех этих представлений и методов действий с использованием скаффолдинга.

Давайте посмотрим на простой пример. Мы создадим тот же пример, который содержит класс модели Employee, но на этот раз мы будем использовать скаффолдинг.

Шаг 1 — Откройте Visual Studio и выберите пункт меню «Файл» → «Создать» → «Проект».

Откроется новое диалоговое окно проекта.

Новый Диалог

Шаг 2 — На левой панели выберите Шаблоны → Visual C # → Интернет.

Шаг 3 — В средней панели выберите Веб-приложение ASP.NET.

Шаг 4 — Введите имя проекта «MVCScaffoldingDemo» в поле «Имя» и нажмите «ОК» для продолжения. Вы увидите следующее диалоговое окно, в котором вас попросят установить начальный контент для проекта ASP.NET.

MVCScaffoldingDemo

Шаг 5 — Для простоты выберите опцию «Очистить» и установите флажок MVC в разделе «Добавить папки и основные ссылки для» и нажмите «ОК».

Это создаст базовый проект MVC с минимальным предопределенным содержанием.

После создания проекта в Visual Studio вы увидите несколько файлов и папок, отображаемых в окне обозревателя решений.

Проект создан Visual Studio

Добавить поддержку Entity Framework

Первым шагом является установка Entity Framework. Щелкните правой кнопкой мыши по проекту и выберите Диспетчер пакетов NuGet → Управление пакетами NuGet для решения…

NuGet Package Manager

Откроется «Диспетчер пакетов NuGet». Поиск Entity Framework в поле поиска.

Окно поиска Entity Framework

Выберите Entity Framework и нажмите кнопку «Установить». Откроется диалоговое окно предварительного просмотра.

Открыть диалог предварительного просмотра

Нажмите Ok, чтобы продолжить.

Нажмите Ok, чтобы продолжить

Нажмите кнопку «Я принимаю», чтобы начать установку.

Я принимаю кнопку установки

После установки Entity Framework вы увидите сообщение в окне вывода, как показано на скриншоте выше.

Добавить модель

Чтобы добавить модель, щелкните правой кнопкой мыши папку «Модели» в обозревателе решений и выберите «Добавить» → «Класс». Вы увидите диалоговое окно «Добавить новый элемент».

Диалог предметов

Выберите Class в средней панели и введите Employee.cs в поле имени.

Добавьте некоторые свойства в класс Employee, используя следующий код.

using System;

namespace MVCScaffoldingDemo.Models {
   public class Employee{
      public int ID { get; set; }
      public string Name { get; set; }
      public DateTime JoiningDate { get; set; }
      public int Age { get; set; }
   }
}

Добавить DBContext

У нас есть Модель Сотрудника, теперь нам нужно добавить еще один класс, который будет взаимодействовать с Entity Framework для извлечения и сохранения данных. Ниже приведен полный код в файле Employee.cs.

using System;
using System.Data.Entity;

namespace MVCScaffoldingDemo.Models{
   public class Employee{
      public int ID { get; set; }
      public string Name { get; set; }
      public DateTime JoiningDate { get; set; }
      public int Age { get; set; }
   }
	
   public class EmpDBContext : DbContext{
      public DbSet<Employee> Employees { get; set; }
   }
}

Как вы можете видеть, «EmpDBContext» является производным от класса EF, известного как «DbContext». В этом классе у нас есть одно свойство с именем DbSet, которое в основном представляет сущность, которую вы хотите запросить и сохранить.

Теперь давайте создадим решение, и вы увидите сообщение, когда проект будет успешно собран.

Проект успешно построен

Добавить элемент лесов

Чтобы добавить каркас, щелкните правой кнопкой мыши папку «Контроллеры» в обозревателе решений и выберите «Добавить» → «Новый элемент каркаса».

Новый лес

Появится диалоговое окно Add Scaffold.

Показать диалоги лесов

Выберите MVC 5 Controller с представлениями, используя Entity Framework в средней панели, и нажмите кнопку «Добавить», чтобы открыть диалоговое окно «Добавить контроллер».

Среда Entity Framework

Выберите Employee из выпадающего списка класса Model и EmpDBContext из выпадающего класса контекста Data. Вы также увидите, что имя контроллера выбрано по умолчанию.

Нажмите кнопку «Добавить», чтобы продолжить, и вы увидите следующий код в EmployeesController, который создается Visual Studio с использованием Scaffolding.

using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web.Mvc;
using MVCScaffoldingDemo.Models;

namespace MVCScaffoldingDemo.Controllers {
   public class EmployeesController : Controller{
      private EmpDBContext db = new EmpDBContext();
      
      // GET: Employees
      public ActionResult Index(){
         return View(db.Employees.ToList());
      }
      
      // GET: Employees/Details/5
      public ActionResult Details(int? id){
         if (id == null){
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
         }
			
         Employee employee = db.Employees.Find(id);
			
         if (employee == null){
            return HttpNotFound();
         }
         return View(employee);
      }
      
      // GET: Employees/Create
      public ActionResult Create(){
         return View();
      }
      
      // POST: Employees/Create
      // To protect from overposting attacks, please enable the specific
      properties you want to bind to, for
      // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
      [HttpPost]
      [ValidateAntiForgeryToken]
		
      public ActionResult Create([Bind(Include = "ID,Name,JoiningDate,Age")]
      Employee employee){
         if (ModelState.IsValid){
            db.Employees.Add(employee);
            db.SaveChanges();
            return RedirectToAction("Index");
         }
         return View(employee);
      }
      
      // GET: Employees/Edit/5
      public ActionResult Edit(int? id){
         if (id == null){
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
         }
			
         Employee employee = db.Employees.Find(id);
			
         if (employee == null){
            return HttpNotFound();
         }
         return View(employee);
      }
      
      // POST: Employees/Edit/5
      // To protect from overposting attacks, please enable the specific
      properties you want to bind to, for
      // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
      [HttpPost]
      [ValidateAntiForgeryToken]
      public ActionResult Edit([Bind(Include = "ID,Name,JoiningDate,Age")]Employee employee){
         if (ModelState.IsValid){
            db.Entry(employee).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
         }
         return View(employee);
      }
      
      // GET: Employees/Delete/5
      public ActionResult Delete(int? id){
         if (id == null){
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
         }
			
         Employee employee = db.Employees.Find(id);
			
         if (employee == null){
            return HttpNotFound();
         }
         return View(employee);
      }
      
      // POST: Employees/Delete/5
      [HttpPost, ActionName("Delete")]
      [ValidateAntiForgeryToken]
		
      public ActionResult DeleteConfirmed(int id){
         Employee employee = db.Employees.Find(id);
         db.Employees.Remove(employee);
         db.SaveChanges();
         return RedirectToAction("Index");
      }
      
      protected override void Dispose(bool disposing){
         if (disposing){
            db.Dispose();
         }
			
         base.Dispose(disposing);
      }
   }
}

Запустите приложение и укажите следующий URL-адрес http: // localhost: 59359 / employee . Вы увидите следующий вывод.

Запустите ваше приложение

Вы можете видеть, что в View нет данных, потому что мы не добавили никаких записей в базу данных, созданную Visual Studio.

Давайте добавим одну запись из браузера, нажав на ссылку «Создать новую», она отобразит представление «Создать».

Нажав Создать новый

Давайте добавим некоторые данные в следующее поле.

Добавление данных в поле

Нажмите кнопку «Создать», и он обновит представление индекса.

Обновить индексный вид

Вы можете видеть, что новая запись также добавляется в базу данных.

Добавлена ​​новая запись

Как вы можете видеть, мы реализовали тот же пример с помощью Scaffolding, который является гораздо более простым способом создания ваших представлений и методов Action из вашего класса модели.