Методические указания к ДЗ №2 (1071212), страница 5
Текст из файла (страница 5)
«Интернет-технологии»83на фрагментusing MvcApplication.Models;namespace MvcApplication.Controllers{public class ProcessorController : Controller{//// GET: /Processor///Создание объекта класса для работы с данными//который был сгенерирован Entity FrameworkaspdbEntities db = new aspdbEntities();public ActionResult Index(){return View(db.Processor.ToList());}Запустим приложение. Если нажать кнопку «Процессоры», то отображаетсяформа со списком процессоров.Рис. 108Для изменения текста сообщений, кнопок и т.д. необходимо редактироватьфайл вида «Views/Processor/Index.aspx».ОглавлениеГапанюк Ю.Е. «Интернет-технологии»843.3.4.3Создание формы детальных данных для таблицы «Processor»Внесем следующие изменения в метод «Details()»:public ActionResult Details(int id){//Получение процессора по id//Для поиска используется запрос LINQvar proc = (from data in db.Processorwhere data.ProcessorID == idselect data).First();return View(proc);}Нажмем правую кнопку на названии метода «Details()», выберем пунктменю «Add View».
Заполним поля в соответствии со следующей формой.Рис. 109Запустим приложение. Если в списке процессоров нажать гиперссылку«Details», то отображается следующая форма:ОглавлениеГапанюк Ю.Е. «Интернет-технологии»85Рис. 110Обратите внимание, что в строке URL не отображается название сценарияASPX. В строке URL отображается строка определенного вида. Каждому видустроки ставится в соответствие определенный метод определенного контроллера.В ASP.NET MVC строка URL содержит следующие данные:http://хост:порт/контроллер/метод/id записиНапример,строкеURL«http://localhost:3404/Processor/Details/22»соответствует вызов метода Details контроллера Processor. Методу передаетсяпараметр 22 (это id записи в таблице).Параметр «id записи» может отсутствовать (например, для метода Index).Но все методы контроллера, которые используют GET, принимают один параметр(id записи в таблице).Если строку URL отредактировать (изменить название контроллера, методаили id), то это приведет к вызову другого метода.
То есть, изменяя строку URLможно вызывать методы контроллеров с нужными параметрами.ОглавлениеГапанюк Ю.Е. «Интернет-технологии»86Этот подход часто называется «URL rewriting» – «перезапись URL».Использование перезаписи URL делает адреса URL более понятными дляпользователя и облегчает их ручное редактирование.3.3.4.4Созданиеформыредактированияданныхдлятаблицы«Processor»Внесем следующие изменения в методы «Edit()»://// GET: /Processor/Edit/5public ActionResult Edit(int id){//На основании параметра id в БД производится поиск нужной записи//Найденная запись передается как параметр в соответствующий вид//Для поиска используется лямбда-выражениеreturn View(db.Processor.Single(p => p.ProcessorID == id));}//// POST: /Processor/Edit/5[HttpPost]public ActionResult Edit(int id, FormCollection collection){try{//Получение текущего элемента для обновленияvar proc = db.Processor.Single(p => p.ProcessorID == id);//Обновление элемента текущими введенными даннымиUpdateModel(proc);//Сохранение объекта Entity Framework в БДdb.SaveChanges();//Переход к списку данныхreturn RedirectToAction("Index");}catch{return View();}}Сгенерируем вид в соответствии со следующей формой:ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»87Рис. 111Запустим приложение. Если в списке процессоров нажать гиперссылку«Edit», то отображается следующая форма:ОглавлениеГапанюк Ю.Е. «Интернет-технологии»88Рис. 1123.3.4.5Создание формы добавления новой записи для таблицы«Processor»Внесем следующие изменения в методы «Create()»://// GET: /Processor/Createpublic ActionResult Create(){return View();}//// POST: /Processor/Create[HttpPost]public ActionResult Create(FormCollection collection){try{//Создание нового объекта данныхProcessor proc = new Processor();//Добавление данных из коллекции введенных полейproc.ProcessorName = collection["ProcessorName"];ОглавлениеГапанюк Ю.Е. «Интернет-технологии»89//Добавление созданного объекта в список процессоровdb.Processor.AddObject(proc);//Сохранение объекта Entity Framework в БДdb.SaveChanges();//Переход к списку данныхreturn RedirectToAction("Index");}catch{return View();}}Сгенерируем вид в соответствии со следующей формой:Рис.
113Запустим приложение. Если в списке процессоров нажать гиперссылку«Create New», то отображается форма ввода новой записи, если в ней нажатькнопку «Create», то запись будет добавлена.ОглавлениеГапанюк Ю.Е. «Интернет-технологии»90Рис. 1143.3.4.6Создание формы удаления данных для таблицы «Processor»Внесем следующие изменения в методы «Delete()»://// GET: /Processor/Delete/5public ActionResult Delete(int id){return View(db.Processor.Single(p => p.ProcessorID == id));}//// POST: /Processor/Delete/5[HttpPost]public ActionResult Delete(int id, FormCollection collection){try{//Получение текущего элемента для обновленияvar proc = db.Processor.Single(p => p.ProcessorID == id);//Удаление объектаdb.DeleteObject(proc);//Сохранение объекта Entity Framework в БДdb.SaveChanges();ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»91//Переход к списку данныхreturn RedirectToAction("Index");}catch{return View();}}Сгенерируем вид в соответствии со следующей формой:Рис. 115Запустим приложение. Если в списке процессоров нажать гиперссылку«Delete», то отображается форма подтверждения удаления, если в ней нажатькнопку «Delete», то запись будет удалена.ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»92Рис. 1163.3.5 Работа с таблицей «Computer»3.3.5.1Создание класса-валидатора для модели таблицы «Computer»В предыдущем примере мы не проверяли правильность ввода данных опроцессоре. Проверим правильность ввода данных для компьютера.В ASP.NET MVC существует удобный способ проверки правильности вводаданных с использованием аннотаций. Рассмотрим класс «ChangePasswordModel»,который был автоматически сгенерирован при создании проекта.public class ChangePasswordModel{[Required][DataType(DataType.Password)][Display(Name = "Current password")]public string OldPassword { get; set; }[Required][ValidatePasswordLength][DataType(DataType.Password)][Display(Name = "New password")]ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»93public string NewPassword { get; set; }[DataType(DataType.Password)][Display(Name = "Confirm new password")][Compare("NewPassword", ErrorMessage = "The new password andconfirmation password do not match.")]public string ConfirmPassword { get; set; }}Перед каждым свойством (полем данных) в квадратных скобках указаныаннотации, которые задают ограничения для поля данных.Например для поля «OldPassword» указаны следующие аннотации: [Required] – поле обязательно для ввода. [DataType(DataType.Password)] – указание типа данных. [Display(Name="Current–password")]названиеполядляпользователя.Полныйсписоканнотацийприведенвпространствеимен«System.ComponentModel.DataAnnotations».Обратим внимание, что класс «ChangePasswordModel» не связан с БД,поэтому аннотации могут быть добавлены в текст класса.Внашемслучаеклассымоделисгенерированыавтоматическисиспользованием «Entity Framework», поэтому аннотации не могут быть добавленыв текст классов.Для решения этой проблемы используются классы-валидаторы, которыенадстраиваются над модельными классами и позволяют задавать ограничения дляполей модельных классов.Добавим в каталог «Models» файл «ComputerValidator.cs»:usingusingusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Web;System.ComponentModel;System.ComponentModel.DataAnnotations;namespace MvcApplication.Models{//Класс валидатор "надстраивается" над модельным классом с помощью аннотацииMetadataType//Computer - модельный класс, сгенерированный с помощью Entity FrameworkОглавлениеГапанюк Ю.Е.
«Интернет-технологии»94[MetadataType(typeof(ComputerValidator))]public partial class Computer { }//В классе валидаторе аннотации указываются для свойств класса,соответствующих полям данныхpublic class ComputerValidator{[Required][StringLength(50)][DisplayName("Наименование компьютера")]public object ComputerName { get; set; }[Required][DisplayName("Емкость жесткого диска")]public object hdd { get; set; }[Required][DataType(DataType.Date)][DisplayName("Дата модернизации")]public object lastupgrade { get; set; }}}3.3.5.1Создание контроллера для таблицы «Computer»Добавим новый контроллер «ComputerController» и включим флажок дляавтоматического создания методов.Рис. 1173.3.5.2Создание формы списка данных для таблицы «Computer»В сгенерированном классе-контроллере нажмем правую кнопку на названииметода «Index()», выберем пункт меню «Add View».
Заполним поля всоответствии со следующей формой.ОглавлениеГапанюк Ю.Е. «Интернет-технологии»95Рис. 118В тексте класса контроллера заменим фрагмент:namespace MvcApplication.Controllers{public class ComputerController : Controller{//// GET: /Computer/public ActionResult Index(){return View();}на фрагментusing MvcApplication.Models;namespace MvcApplication.Controllers{public class ComputerController : Controller{//Создание объекта класса для работы с данными//который был сгенерирован Entity FrameworkОглавлениеГапанюк Ю.Е.