Методические указания к ДЗ №2 (1071212), страница 6
Текст из файла (страница 6)
«Интернет-технологии»96aspdbEntities db = new aspdbEntities();public ActionResult Index(){return View(db.Computer.ToList());}Запустимприложение.Еслинажатькнопку«Компьютеры»,тоотображается форма со списком компьютеров.Рис. 1193.3.5.3Созданиеформыредактированияданныхдлятаблицы«Computer»Внесем следующие изменения в методы «Edit()»:/// <summary>/// Список процессоров/// </summary>/// <param name="procSelected">Выбранное значение процессора</param>private void SetProcessorList(object procSelected = null){//Запрос на выборку списка процессоровvar procQuery = from p in db.Processororderby p.ProcessorNameselect p;ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»97//К динамическому списку ViewBag добавляем свойстоProcessorSelectList,//содержащее объект, создающий выпадающий список процессоров//Этот объект используется в видах создания и редактированияViewBag.ProcessorSelectList = new SelectList(procQuery, "ProcessorID","ProcessorName", procSelected);//Создаем свойство, содержащее название процессора для детального видаViewBag.CurrentProcessorName = "";if (procSelected != null){//Сохраняем в это свойство название выбранного процессораvar proc = db.Processor.Single(p => p.ProcessorID ==(int)procSelected);ViewBag.CurrentProcessorName = proc.ProcessorName;}}//// GET: /Computer/Edit/5public ActionResult Edit(int id){var comp = db.Computer.Single(p => p.ComputerID == id);SetProcessorList(comp.ProcessorID);return View(comp);}//// POST: /Computer/Edit/5[HttpPost]public ActionResult Edit(int id, FormCollection collection){try{var comp = db.Computer.Single(p => p.ComputerID == id);UpdateModel(comp);db.SaveChanges();return RedirectToAction("Index");}catch{return View();}}Сгенерируем вид в соответствии со следующей формой:ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»98Рис. 120Запустим приложение. Если в списке компьютеров нажать гиперссылку«Edit», то отображается следующая форма:ОглавлениеГапанюк Ю.Е. «Интернет-технологии»99Рис. 121Поле «процессор» должно отображаться в виде списка. Для этогоотредактируем файл «Views/Computer/Edit.aspx».Заменим фрагмент<div class="editor-field"><%: Html.EditorFor(model => model.ProcessorID) %><%: Html.ValidationMessageFor(model => model.ProcessorID) %></div>на фрагмент<div class="editor-field"><%: Html.DropDownListFor(model => model.ProcessorID,(SelectList)(ViewBag.ProcessorSelectList))%><%: Html.ValidationMessageFor(model => model.ProcessorID) %></div>Запустим приложение.
Если в списке компьютеров нажать гиперссылку«Edit», то отображается форма, в которой можно выбирать процессор из списка.ОглавлениеГапанюк Ю.Е. «Интернет-технологии»100Рис. 122Если в форме ввода допустить ошибки, то срабатывает класс-валидатор:ОглавлениеГапанюк Ю.Е. «Интернет-технологии»101Рис. 1233.3.5.4Создание формы детальных данных для таблицы «Computer»Внесем следующие изменения в метод «Details()»:public ActionResult Details(int id){var comp = db.Computer.Single(p => p.ComputerID == id);SetProcessorList(comp.ProcessorID);return View(comp);}Сгенерируем вид в соответствии со следующей формой:ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»102Рис. 124Для того, чтобы вместо кода процессора отображалось его название, вфайле «Views/Computer/Details.aspx» заменим фрагмент<div class="display-label">ProcessorID</div><div class="display-field"><%: Model.ProcessorID %></div>на фрагмент<div class="display-label">ProcessorID</div><div class="display-field"><%: ViewBag.CurrentProcessorName %></div>Запустим приложение. Если в списке компьютеров нажать гиперссылку«Details», то отображается следующая форма:ОглавлениеГапанюк Ю.Е. «Интернет-технологии»103Рис.
1253.3.5.5Создание формы добавления новой записи для таблицы«Computer»Внесем следующие изменения в методы «Create()»://// GET: /Computer/Createpublic ActionResult Create(){SetProcessorList(null);return View();}//// POST: /Computer/Create[HttpPost]public ActionResult Create(FormCollection collection)ОглавлениеГапанюк Ю.Е. «Интернет-технологии»104{try{//Создание нового объекта данныхComputer comp = new Computer();//Добавление данных из коллекции введенных полейcomp.ComputerName = collection["ComputerName"];int temp_hdd;if (int.TryParse(collection["hdd"], out temp_hdd)){comp.hdd = temp_hdd;}DateTime temp_lastupgrade;if (DateTime.TryParse(collection["lastupgrade"], outtemp_lastupgrade)){comp.lastupgrade = temp_lastupgrade;}int temp_ProcessorID;if (int.TryParse(collection["ProcessorID"], out temp_ProcessorID)){comp.ProcessorID = temp_ProcessorID;}int temp_ram;if (int.TryParse(collection["ram"], out temp_ram)){comp.ram = temp_ram;}bool temp_server;if (bool.TryParse(collection["server"], out temp_server)){comp.server = temp_server;}//Добавление созданного объекта в список компьютеровdb.Computer.AddObject(comp);//Сохранение объекта Entity Framework в БДdb.SaveChanges();//Переход к списку данныхreturn RedirectToAction("Index");}catch{return View();}}Сгенерируем вид в соответствии со следующей формой:ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»105Рис. 126Поле «процессор» должно отображаться в виде списка. Для этогоотредактируем файл «Views/Computer/Create.aspx».Заменим фрагмент<div class="editor-field"><%: Html.EditorFor(model => model.ProcessorID) %><%: Html.ValidationMessageFor(model => model.ProcessorID) %></div>на фрагмент<div class="editor-field"><%: Html.DropDownListFor(model => model.ProcessorID,(SelectList)(ViewBag.ProcessorSelectList))%><%: Html.ValidationMessageFor(model => model.ProcessorID) %></div>Запустим приложение.
Если в списке компьютеров нажать гиперссылку«Create New», то отображается форма ввода новой записи, если в ней нажатькнопку «Create», то запись будет добавлена.ОглавлениеГапанюк Ю.Е. «Интернет-технологии»106Рис. 1273.3.5.6Создание формы удаления данных для таблицы «Computer»Внесем следующие изменения в методы «Delete()»://// GET: /Computer/Delete/5public ActionResult Delete(int id){return View(db.Computer.Single(p => p.ComputerID == id));}//// POST: /Computer/Delete/5[HttpPost]public ActionResult Delete(int id, FormCollection collection){try{ОглавлениеГапанюк Ю.Е. «Интернет-технологии»107//Получение текущего элемента для удаленияvar comp = db.Computer.Single(p => p.ComputerID == id);//Удаление объектаdb.DeleteObject(comp);//Сохранение объекта Entity Framework в БДdb.SaveChanges();//Переход к списку данныхreturn RedirectToAction("Index");}catch{return View();}}Сгенерируем вид в соответствии со следующей формой:Рис.
128Запустим приложение. Если в списке компьютеров нажать гиперссылку«Delete», то отображается форма подтверждения удаления, если в ней нажатькнопку «Delete», то запись будет удалена.ОглавлениеГапанюк Ю.Е. «Интернет-технологии»108Рис. 129В поле «процессор» можно выводить не код, а наименование процессора,как в форме детальных данных.3.3.5.7Изменение формы удаления данных для таблицы «Processor»Внесем изменения в форму удаления данных для таблицы «Processor»,чтобы нельзя было удалить процессор, на который есть ссылка в таблицекомпьютеров.Внесем следующие изменения в метод «Delete()» файла контроллера«ProcessorController.cs»://// GET: /Processor/Delete/5public ActionResult Delete(int id){//Количество компьютеров, которые ссылаются на данный процессорvar ComputerCountVar = (from data in db.ComputerОглавлениеГапанюк Ю.Е.
«Интернет-технологии»109where data.ProcessorID == idselect data).Count();//К динамическому списку ViewBag добавляем свойсто ComputerCount,//содержащее количество компьютеров, которые ссылаются на данныйпроцессорViewBag.ComputerCount = ComputerCountVar;return View(db.Processor.Single(p => p.ProcessorID == id));}В файле вида «Views/Processor/Delete.aspx» заменим фрагмент<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"><h2>Delete</h2><h3>Are you sure you want to delete this?</h3><fieldset><legend>Processor</legend><div class="display-label">ProcessorName</div><div class="display-field"><%: Model.ProcessorName %></div></fieldset><% using (Html.BeginForm()) { %><p><input type="submit" value="Delete" /> |<%: Html.ActionLink("Back to List", "Index") %></p><% } %></asp:Content>на фрагмент<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"><h2>Delete</h2><% if (ViewBag.ComputerCount > 0) { %><p>Невозможно удалить процессор " <%: Model.ProcessorName %> " так как на негоссылаются <%: ViewBag.ComputerCount %> записи(ей) в таблице компьютеров</p><%: Html.ActionLink("Back to List", "Index") %><% } else { %><h3>Are you sure you want to delete this?</h3><fieldset><legend>Processor</legend><div class="display-label">ProcessorName</div><div class="display-field"><%: Model.ProcessorName %></div>ОглавлениеГапанюк Ю.Е.
«Интернет-технологии»110</fieldset><% using (Html.BeginForm()) { %><p><input type="submit" value="Delete" /> |<%: Html.ActionLink("Back to List", "Index") %></p><% } %><% } %></asp:Content>При попытке удаления процессора, на который есть ссылки в таблицекомпьютеров, отображается следующая форма:Рис. 130ОглавлениеГапанюк Ю.Е. «Интернет-технологии»1114 Источники1. Microsoft ASP.NET. 2011.
URL http://www.asp.net (дата обращения01.05.2011).2. Эспозито Д. Microsoft ASP.NET 2.0. Базовый курс. Мастер-класс / Пер. сангл. – М.: Издательство «Русская редакция», 2007. – 688 с.3. Эспозито Д. Microsoft ASP.NET 2.0. Углубленное изучение / Пер. с англ.– М.: Издательство «Русская редакция», 2007. – 592 с.4. Сандерсон С. ASP.NET MVC Framework с примерами на C# дляпрофессионалов / Пер. с англ. – М.: Издательство «Вильямс», 2010. –560с.ОглавлениеГапанюк Ю.Е. «Интернет-технологии».