1. 程式人生 > >MVC+EF實現增刪改查

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;/*將內容與單元格填充開*/

}

  1. 資料就完美的呈現在瀏覽器介面了,下面是效果圖。

  

 

 

在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