MVC+EF實現增刪改查
在MVC的控制器中查詢資料庫中的資料,然後在用檢視顯示出來,這套流程是怎麼走的哪,下面我自己先巨集觀的總結一下。
首先,在Controllers資料夾下建立HomeController控制器,然後在ActionResult Index()方法右擊——>新增檢視。然後在HomeController頁面引用名稱空間(Models)。
一、查詢資料
查詢資料的時候,我總結了四種方式,下面一個個介紹。
1、第一種查詢方式是使用標準的運算子(SQO)查詢
OumindBlogEntities db = new OumindBlogEntities();//例項化資料庫實體物件
IQueryable<Models.BlogArticle> query= db.BlogArticles.Where(d => d.AIsDel==false);
2、使用DBQuery延遲載入資料查詢
OumindBlogEntities db = new OumindBlogEntities();//例項化資料庫實體物件 DbQuery<MvcApplication1.Models.BlogArticle> query = (db.BlogArticles.Where(d => d.AIsDel == false)) as DbQuery<MvcApplication1.Models.BlogArticle>;
3、使用List直接查詢資料庫,防止延遲載入資料
List<Models.BlogArticle> list = db.BlogArticles.Where(d => d.AIsDel == false).ToList();
4、使用Linq語句查詢
List<Models.BlogArticle> list = (from d in db.BlogArticles where d.AIsDel == false select d).ToList();
使用linq語句查詢的時候,它的邏輯是:首先說明在哪個實體中查詢資料(from d in db.BlogArtiticles)然後是將要查詢的條件(where d.AIsDel == false),最後在實體中查詢出來(select d)。使用Linq語句,.NET 編譯器在編譯程式集的時候,也就是將程式集編譯成中間程式碼的時候,將Linq語句轉為SQO(標準查詢運算子)來執行,只不過Linq語句讓程式設計師敲起來比較“爽”而已。
二、將資料傳送給相應的檢視
1、使用ViewBag傳送資料
ViewBag.DataList = list; //使用ViewBag傳輸資料
ViewBag是動態型別的,他的好處是我們可以隨便給他新增屬性
2、使用ViewData傳送資料
ViewData["DataList"] = list;//使用ViewData["DataList"]傳輸資料
return View();//載入檢視
三、顯示頁面
傳送給檢視的是一個List,是一堆資料,檢視需要將這一堆資料獲取到,然將將其組織起來,這樣才能形成美觀的頁面。下面在Index.cshtml中將list中的資料遍歷出來,然後顯示在頁面上。
給這個table添加個樣式,讓其美觀一些
<style type="text/css">
#tbList {
border:1px solid #0094ff;
width:800px;
margin:10px auto; /*上下10px;左右水平居中*/
border-collapse:collapse;/*設定為收縮邊框*/
}
#tbList th, td {
border:1px solid #0094ff;
padding:10px;/*將內容與單元格填充開*/
}
-
資料就完美的呈現在瀏覽器介面了,下面是效果圖。
改
在MVC中的 改 是:利用一條資料ID屬性,更改裡面的內容。這項更改操作用到了強型別的下拉列表框,還有MVC檢視中Model這個屬性等等。
一、將要執行業務的思維邏輯
1、從資料庫搜尋出資料來,將資料顯示在前臺View介面;
2、點選修改按鈕,將待修改資料的ID傳給Controller裡相對應的方法;
3、在上一步的Controller裡面按照ID搜尋資料庫中的內容,將搜尋出來的內容賦給一個定義好的實體;
4、將第三步的實體(MVC中的檢視有一個model屬性)作為引數傳遞給相對應的Modify.cshtml檢視;
5、在Modiy.cshtml中,建立一個表單,表單的提交方式是Post,然後利用第四步傳遞過來的實體將資訊顯示出來。
6、在瀏覽器中修改相應的資訊,修改完畢後,點選提交按鈕,當表單提交後,會根據指定的控制器(Controller),以及控制器中的方法去修改資料庫中的資料。
7、根據提前編寫好的程式碼,根據第六步表單的提交的資料,修改相對應資料庫中的內容,最後儲存資料庫。
二、程式碼展示
1、控制器中的程式碼
[HttpGet] //點超連結時,是連結到這
public ActionResult Modify(int id)
{
//根據ID查詢資料庫,返回的集合中拿到第一個實體物件
BlogArticle art = (from a in db.BlogArticles where a.AId == id select a).FirstOrDefault();
//生成文章分類下拉框,列表集合中拿到第一個實體物件
IEnumerable<SelectListItem> listItem = (from c in db.BlogArticleCates
where c.IsDel == false
select c).ToList()
.Select(c => new SelectListItem{ Value = c.Id.ToString(), Text = c.Name });
//將生成文章分類的下拉框選項集合設定給ViewBag
ViewBag.CateList = listItem;
//載入檢視,使用View的建構函式,將資料傳給檢視上的 名為Model的屬性
return View(art);
}
[HttpPost] //點選提交表單時,是執行的這
public ActionResult Modify(BlogArticle model)
{
try
{
//1、將實體物件加入EF物件容器中,並獲取偽包裝類物件
DbEntityEntry<BlogArticle> entry = db.Entry<BlogArticle>(model);
//2、將包裝類物件的狀態設定為 unchanged
entry.State = System.Data.EntityState.Unchanged;
//3、設定被修改的屬性
entry.Property(a => a.ATitle).IsModified = true;
entry.Property(a => a.AContent).IsModified = true;
entry.Property(a => a.ACate).IsModified = true;
//4、提交到資料,完成修改
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
catch (Exception ex)
{
return Content("修改失敗!!!" + ex.Message);
}
}
2、檢視中的程式碼
@model MvcApplication1.Models.BlogArticle
<!--指定頁面Model屬性的型別-->
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>修改</title>
<style type="text/css">
#tbList {
border:1px solid #0094ff;
width:400px;
margin:10px auto; /*上下10px;左右水平居中*/
border-collapse:collapse;/*設定為收縮邊框*/
}
#tbList th, td {
border:1px solid #0094ff;
padding:10px;/*將內容與單元格填充開*/
}
</style>
</head>
<body>
@using (Html.BeginForm("Modify","Home",FormMethod.Post))
{
<table id="tbList">
<tr>
<td colspan="2">修改 @Html.HiddenFor(a=>a.AId)</td>
</tr>
<tr>
<td>標題:</td>
<!--使用HTMLHelper的強型別方法,直接從Model中根據ATitle屬性生成文字框-->
<td>@Html.TextBoxFor(a=>a.ATitle)</td>
</tr>
<tr>
<td>分類:</td>
<!--使用強型別方法生成下拉框,並自動根據model屬性裡的ACate值 設定下拉框的預設選中項-->
<td>@Html.DropDownListFor(a=>a.ACate, ViewBag.CateList as IEnumerable<SelectListItem>)</td>
</tr>
<tr>
<td>內容:</td>
<!--使用HTMLHelper的強型別方法,直接從Model中根據AContent屬性生成文字域-->
<td>@Html.TextAreaFor(a=>a.AContent,10,60,null)</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="確定修改" />@Html.ActionLink("返回","Index","Home")</td>
</tr>
</table>
}
</body>
</html>
三、值得學習的知識點
1、在檢視中,利用HtmlHelper方法跳轉頁面,利用下面這個方法,其中“返回”是連結的名稱,Home 和 Index 是指的檢視的路徑,也就是Home下面的Index檢視
@Html.ActionLink("返回","Index","Home")
2、在Controller中跳轉檢視
return RedirectToAction("Index", "Home");
3、在JS中,呼叫Controller的方法,並傳遞引數。Home代表Controller的名稱,Modify代表裡面的方法名
window.location = "/Home/Modify/" + id;
4、利用表單提交事件,呼叫Controller的方法。
@using (Html.BeginForm("Modify","Home",FormMethod.Post))
5、在Controller中,將資料從資料庫中搜索出來後,利用View的model屬性,將資料傳給檢視,檢視再利用這個屬性將資料顯示來。
BlogArticle art = (from a in db.BlogArticles where a.AId == id select a).FirstOrDefault();
return View(art);
顯示資料程式碼
<!--使用HTMLHelper的強型別方法,直接從Model中根據ATitle屬性生成文字框-->
<td>@Html.TextBoxFor(a=>a.ATitle)</td>
轉自:https://blog.csdn.net/zhoukun1008/article/details/50531042