在前天的學習小結中《15天學習MVC后的小結(分享經歷與想法)》http://www.cnblogs.com/insus/p/3369870.html 知道學習與練習過程中,走了一些彎路。分享出來之后,最大的收獲,就是得到網友們的指點。
今天Insus.NET想再起另外一個案例來演練,集中來演示MVC的最要功能,顯示數據,顯示單數據,創建添加數據,編輯更新數據和刪除數據等。改正以前不足的方法,優化繁雜的代碼,以及把今天學習掌握的知識也一起分享出來。
數據庫可以從下面鏈接下載:http://download.cnblogs.com/insus/SQL/DataBases/Tutorial2013Oct16.rar 它是SQL Server 2012數據庫備份文件,你可以恢復至 2012或更新版本,如SQL Server 2014的數據庫上。
為了不用恢復數據庫,也能看到數據表結構,可以參考下面的表結構與存儲過程:
這張表[dbo].[FruitKind]是這次的演示的主角,其中有一個字段[FruitCategory_nbr]是一個外鍵,也就是前段時間學習中數據表的主鍵。在數據為創建好表之后,我們還需要創建一系列的存儲過程,由於此表有外鍵,也說明了這是多表關聯。因此先寫好一個表函數,即是表關聯:
下面的存儲過程,是獲取數據表所有記錄:
以主鍵來獲取單筆記錄數據:
添加數據至數據庫的存儲過程:
更新數據庫的存儲過程:
最后一個存儲過程,即是刪除的存儲過程:
Insus.NET一開始想學MVC時,就想到一定要緊密與數據操作聯系在一起。因此這些練習中,當然少不了數據相關的內容,由於數據庫也是安裝了新版本SQL Server 2014,也希望在練習過程中,能體驗到新版本之中細微變化。
OK,下面我們打開Visual Studio 2013,找到上次的MVC應用程序。在Models目錄之下,創建一個Model,名稱為FruitKind.cs,就以數據表名來定義,這樣好在程序維護時方便。這個Model,有三個public的屬性,也是表的三個字段名。
好的,接下來我們需要創建一個Entity(FruitKindEntity.cs),它也是被創建於Models目錄下。我們目的是希望這個實體能與數據庫進行交互,也就是說能從這個實體中讀取數據,存儲數據以及刪除數據等。
這個實體,需要注意一下命名空間,當然在你自己的練習或理專案中,有自己的命合空間。然后是第#13代碼,那是一個組件,可從下面鏈接了解更多:
http://www.cnblogs.com/insus/archive/2013/05/23/3096045.html 在這個實體內,最后要說的的,就是#59行的私有函數。那是希望從數據庫獲取的數據為DataTable的,需要轉換為List<T>類型,這樣好在MVC的視圖中好處理。當然你也可以在視圖中直接使用DataTable,如《DataTable數據顯示於MVC應用程序》http://www.cnblogs.com/insus/p/3361182.html 不過在MVC與LINQ的處理更為強勁。
不過也許會有網友會發現,前些日子,Insus.NET在從數據庫獲取數據之后,是把它轉換為IEnumberable<T>類型。雖然也行,不過在做視圖之前,均需要幾次轉換與抽起。因此Insus.NET在這次練習中改變它。其余五個方法,無需介紹了,一看就明。
現在我們可以寫Controllers(KindController.cs):
上面的Controllers中,先是實例化Models下的FruitKindEntity。
在#14至#18行的Index的Action中,是直接獲取List<T>對象傳給View()。
#20至#23的Details 的Action,下面為了好對比,Insus.NET把以前寫的也帖於此:
在#42至#55行的HttpPost的Edit Action中的實現方法,比起以前寫的,已大大簡化了。
另外,就連Delete Action也做了相關的簡化,對比一下:
算是有進步了,只要認真練習,勤對比。下面Insus.NET還要分享一下五個視圖的代碼。
首先是Index.cnhtml視圖,留意下圖中箭頭的代碼以及其語法,模型,循環以及參數的區別。
Details.cshtml視圖:
Create.cshtml視圖:
Edit.cshtml視圖:
Delete.cshtml視圖:
在所有的視圖中,除了Index.cshtml視圖是引用model為@model IEnumerable<FruitKind>,其它的均為@model Insus.NET.Models.FruitKind。
在顯示值時,使用了 @Html.DisplayFor(o => item.xxx),而在創建或編輯時使用了@Html.HiddenFor(o => Model.xxx)
還有就是在Create.cshtml,Edit.cshtml和Delete.cshtml的視圖中,還有使用Razor語法@using (Html.BeginForm())來產生form和method="post"。
在Index.cshtml有使用了@foreach (var item in Model)來循環產生記錄。
這些都是最基礎的,使用多與習慣而已。
最后需要展示的是實時操作演示: