Asp.Net MVC EF-DbFirst之增刪改查
控制器及動作方法:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Mvc5Test.Models; using System.Data.Entity.Infrastructure; namespace Mvc5Test.Controllers { //用戶的請求總是先發到控制器的某個Action方法,再由Action方法返回對應的視圖 public class HomeController : Controller { //數據上下文對象 BogEntities db = new BogEntities(); //查詢文章 public ActionResult Index() { //SQO標準查詢運算符 //DbQuery<ClassType> query = db.ClassTypes.Where(ct => ct.ParentID==0) as DbQuery<ClassType>; //List<ClassType> ctList = db.ClassType.Where(ct => ct.ParentID == 0).ToList<ClassType>(); //Linq List<Artical> aList = (from a in db.Artical where a.ClassTypeID != 4 select a).ToList(); //***使用ViewData傳遞數據到視圖 ViewData["aList"] = aList; return View(); } //刪除文章 //此處的默認參數id在App_Start的RouteConfig.cs配置 public ActionResult Del(int id) { try { //1.創建要刪除的對象 Artical a = new Artical { ID = id }; //2.將對象添加到EF管理容器 db.Artical.Attach(a); //3.將對象包裝類的狀態標識為刪除 db.Artical.Remove(a); //4.更新數據庫 db.SaveChanges(); //5.更新成功,命令瀏覽器跳轉到列表頁 return RedirectToAction("Index", "Home"); } catch(Exception e) { return Content("刪除失敗!!!"+e.Message); } } //修改文章-顯示動作 [HttpGet] //get請求時執行下面這個方法 public ActionResult Edit(int id) { //1.根據id查詢數據庫,返回集合中的第一個對象 Artical a = (from at in db.Artical where at.ID == id select at).FirstOrDefault(); //2.生成文章分類數據下拉列表集合 IEnumerable<SelectListItem> selectList = (from ct in db.ClassType select ct).ToList() //從db.ClassType集合中選取元素形成一個新的集合CT .Select(ct => new SelectListItem { Value = ct.ID.ToString(), Text = ct.ClassName } //從CT集合中遍歷每個元素,並將遍歷的每個元素轉成SelectListItem對象 ).ToList(); //***使用ViewBag傳遞數據到視圖 ViewBag.CtList = selectList; //3.將文章傳遞給視圖 //***使用View的構造方法,將數據傳給視圖上名為Model的屬性 return View(a); } //修改文章-保存動作 [HttpPost] //post請求時執行下面這個方法 public ActionResult Edit(Artical model) //此時的model就是頁面中待修改的文章實體對象 { try { //1.將實體對象加入EF對象容器中,並獲取偽包裝類對象 DbEntityEntry<Artical> entry = db.Entry<Artical>(model); //2.將包裝類對象的狀態設置為unchanged entry.State = System.Data.Entity.EntityState.Unchanged; //3.設置被改變的屬性 entry.Property(a => a.Title).IsModified = true; entry.Property(a => a.ClassTypeID).IsModified = true; //4.提交到數據庫,完成更改 db.SaveChanges(); //5.更新成功,則命令瀏覽器重定向到列表頁 return RedirectToAction("Index","Home"); } catch (Exception e) { return Content("修改失敗!!!"+e.Message); } } //新增文章-顯示動作 [HttpGet] public ActionResult Add() { //生成文章分類數據下拉列表集合 IEnumerable<SelectListItem> selectList = (from ct in db.ClassType select ct).ToList() //從db.ClassType集合中選取元素形成一個新的集合CT .Select(ct => new SelectListItem { Value = ct.ID.ToString(), Text = ct.ClassName } //從CT集合中遍歷每個元素,並將遍歷的每個元素轉成SelectListItem對象 ).ToList(); //***使用ViewBag傳遞數據到視圖 ViewBag.CtList = selectList; return View(); } //新增文章-保存動作 [HttpPost] public ActionResult Add(Artical model) { try { //1.將實體對象加入EF對象容器中,並獲取偽包裝類對象 DbEntityEntry<Artical> entry = db.Entry<Artical>(model); //2.將包裝類對象的狀態設置為Added entry.State = System.Data.Entity.EntityState.Added; //3.提交到數據庫,完成新增 db.SaveChanges(); //4.更新成功,則命令瀏覽器重定向到列表頁 return RedirectToAction("Index", "Home"); } catch (Exception e) { return Content("新增失敗!!!" + e.Message); } } } }
首頁數據列表視圖:
@using Mvc5Test.Models; @{ Layout = null; } <html> <head> <script type="text/javascript"> function del(id){ if (confirm("確定要刪除嗎?")) { window.location.href = "/home/del/" + id; } } </script> </head> <body> <table> <tr> <td>id</td> <td>title</td> <td>class type</td> <td>opration</td> </tr> @foreach (Artical a in ViewData["aList"] as List<Artical>) { <tr> <td>@a.ID</td> <td>@a.Title</td> <td>@a.ClassType.ClassName</td> <!--a.ClassType是關聯自ClassType表ID字段的外鍵,EF自動進行外鍵關聯查詢--> <td> <a href="javascript:del(@a.ID)">delete</a> <a href="[email protected]
新增視圖:
@model Mvc5Test.Models.Artical @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Add</title> </head> <body> @using (Html.BeginForm("Add", "Home", FormMethod.Post)) { <table> <tr> <td colspan="2">新增</td> </tr> <tr> <td>標題:</td> <!--使用HtmlHelper的強類型方法直接從Model中根據Title屬性生成文本框--> <td>@Html.TextBoxFor(a => a.Title)</td> </tr> <tr> <td>分類:</td> <!--使用HtmlHelper的強類型方法生成下拉框,並根據Model的ClassTypeID屬性設置默認選中項--> <td>@Html.DropDownListFor(a => a.ClassTypeID, ViewBag.CtList as IEnumerable<SelectListItem>)</td> </tr> <tr> <td> <input type="submit" value="確定新增" /> </td> <td> @Html.ActionLink("返回", "Index", "Home") </td> </tr> </table> } </body> </html>
編輯視圖:
@model Mvc5Test.Models.Artical <!--以上代碼是指定頁面Model屬性的類型 --> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Edit</title> </head> <body> @using (Html.BeginForm("Edit", "Home", FormMethod.Post)) { <table> <tr> <td colspan="2">修改</td> @Html.HiddenFor(a => a.ID) </tr> <tr> <td>標題:</td> @*<td>@Html.TextBox("Title", (object)Model.Title)</td>*@ <!--使用HtmlHelper的強類型方法直接從Model中根據Title屬性生成文本框--> <td>@Html.TextBoxFor(a => a.Title)</td> </tr> <tr> <td>分類:</td> <!--使用HtmlHelper的強類型方法生成下拉框,並根據Model的ClassTypeID屬性設置默認選中項--> <td>@Html.DropDownListFor(a=>a.ClassTypeID,ViewBag.CtList as IEnumerable<SelectListItem>)</td> </tr> <tr> <td> <input type="submit" value="確定修改" /> </td> <td> @Html.ActionLink("返回","Index","Home") </td> </tr> </table> } </body> </html>
Asp.Net MVC EF-DbFirst之增刪改查