文章出處

      其實在學校時,已經開設了MVC這門課程,教材由授課老師自己編纂,是和微軟的音樂商店相似的一個書店項目,當時無法理解 Linq、Lambda , 只記得是按照老師的方法,復制+粘貼,不明其意,亦不知其理。心里模糊有個印象,后來在頂崗實習時候接觸的(GIS)地理測繪方面的開發維護,直到換工作轉正后,趁著為后期開發作技術儲備的機會,好好從頭開始學習一下MVC

     MVC是一種高級架構模式,由于先學習的Web Form,剛開始總覺的MVC 的顯示分離增加了應用程序的復雜性,很不好用。當時真是鼠目寸光。沒有見識到 -模型-視圖-控制器- 的強大之處。分層、簡潔、易于維護

     模型:一組實體類,可以理解為“數據層” 。 視圖:定義用戶顯示的界面,被控制器來指定。  控制器:訪問指引處,用來處理來自用戶的請求,以及整個應用程序流的通信

     Razor語法:易于輸入,支持所有的文本編輯器、智能感應、自識別@郵箱/@屬性

下面記一個簡單的表格操作,最后的效果圖如下:

 

關于上面這個Demo,分三部分介紹:

1.CSS樣式引用

   ① 在MVC中,若引用了模板頁,會在默認的模板頁中看到  @Styles.Render("~/Content/css") ,這里是引用CSS樣式配置源,在 文件夾 App_Start 下找到 BundleConfig.cs , 點開后找到  

 bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/Site.css"));

沒錯這里就是引用的CSS樣式表,如果此時需要引用 bootstrap.min.css 樣式,直接以 Include("","",...)的形式加入進去,只是需要注意的是,這里瀏覽器進行編譯時,無法識別壓縮的css文件,只有將 min 去掉,如重命名 bootstrap.css 才可以

   ② 此時,瀏覽器編譯后的界面如下

2.分頁控件

    ①下載并安裝網上開源的分頁控件的Nuget包,在控制器界面引用控件的命名空間 using Webdiyer.WebControls.Mvc;

    ②同樣在視圖界面引用命名空間,還需引用@model PagedList<實體類名(表名)>

    注:視圖界面只允許存在一個@model 的引用,如果之前選擇創建強類型視圖,需要注釋此強類型部分,然后再添加@model 項目名.Models

3.增刪該查

   增刪改查是對數據最基礎的操作,歸根結底,也仍然是離不開參數的傳遞,以編輯為例子, 當前臺點擊編輯時,傳遞該學生的 id ,并提交到設定的控制器中,控制器接收參數,進行判斷,然后返回編輯界面的視圖,編輯界面點擊保存,傳遞學生對象到控制器,控制器再根據Linq完成對數據的操作,返回主視圖

編輯: 

 ① 在主界面的視圖頁中,編輯功能下傳遞當前選中行的學生id,

 跳轉格式: @Html.ActionLink("連接文本", "方法","參數")
@Html.ActionLink("編輯", "Edit", new { id=item.Stu_id})

 ② 在對應的控制器下,接收視圖傳遞進來的學生id ,進行判斷,若有值,則返回至編輯視圖

       //全局變量 數據對象
        private IBBCEntities db = new IBBCEntities();
        //
        // GET: /Default1/Edit/5
        public ActionResult Edit(int id)
        {
            Students students = db.Students.Find(id);
            if (students == null)
            {
                return HttpNotFound();
            }
            return View(students);
        }

 ③ 在編輯視圖中,添加提交按鈕  <input type="submit" value="Save" />

    設置 Post 的請求方式 @using (Html.BeginForm("Edit","Default",FormMethod.Post))  { <></>... }

    其中Html.BeginForm("方法名", "控制器名", "請求方式")

    也可以寫成 @using (Html.BeginForm()) { @Html.ValidationSummary(true)  <></>....  }

    這種寫法,使用的是默認方式(自動提交到對應控制器下的同(類)名的并且帶有[HttpPost]方法下,且提交方式為 post)

 ④ 在后臺控制器中,利用 Linq 來操作數據,完成后仍返回主視圖

        [HttpPost]
        public ActionResult Edit(Students students)
        {
            if (ModelState.IsValid)
            {
                db.Entry(students).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(students);
        }

 作了一個編輯的說明,只要稍稍了解過 Linq ,就不難想出 創建、刪除、查看的方法

 對于刪除,傳遞的id ,即根據id(主鍵)來執行刪除操作,思路:查詢由視圖傳提交來的id 的學生對象,然后刪除對象,保存

        // POST: /Default1/Delete/5
        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            Students students = db.Students.Find(id);
            db.Students.Remove(students);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

對于創建,先驗證添加的對象是否合理,合理:添加,保存。

       // POST: /Default1/Create
        [HttpPost]
        public ActionResult Create(Students students)
        {
            if (ModelState.IsValid)
            {
                db.Students.Add(students);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(students);
        }

      對于以上操作,實際上在項目中是根本不會直接拿過來用的,對于CURD這些操作,往往是先定義好倉儲接口,然后用對應的實體接口去繼承,再去基類中實現這些方法,最后在邏輯中調用。可直接傳入對應的實體和方法名,即可完成邏輯操作。針對傳統的DBhelper操作而言,不用每每實現一個數據庫的功能都要去手寫sql語句。尤其對于大項目而言,頻繁的手寫sql語句,浪費大量的時間和精力。

 

權當作學習記錄

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()