經典.NET三層+ASP.NET MVC 5+ADO.NET實現顯示、添加和刪除數據

2020-12-17 一都編程
.NET MVC實現顯示、添加和刪除功能

#NET編程#

01第1節:項目搭建

一、項目要求

這裡我們使用微軟的.NET開發環境來搭建一個基於ASP.NET MVC 5為UI層的經典.NET三層架構來開發一個增、刪、改、查的基本操作功能系統。

.NET開發環境配置如下:

經典.NET三層架構。ASP.NET MVC 5為UI層。SQL Server 2019資料庫。ADO.NET為數據通信組件。本系統的核心功能主要有:

實現ViewModel到DataModel的轉換。ADO.NET數據對象到泛型集合List<T>的轉換。完成添加數據功能。完成刪除數據功能。完成編輯數據功能。完成各種查詢數據。二、項目結構

這裡採用經典.NET三層架構來實現系統的開發,三層如下說明:

數據訪問層:主要通過數據模型與資料庫交互,獲取資料庫中的數據和向資料庫添加數據。通過DBHelper.cs類庫使用SQL語句操作資料庫,數據訪問層使用DAL表示。業務邏輯層:主要用於處理複雜的業務邏輯,不能與資料庫打交道,該是表現層與數據訪問的中間層。不管是向資料庫保存數據還是返回資料庫中的數據,都必須經過業務邏輯層的處理。業務邏輯層使用BLL表示。表現層:該層主要與用戶直接打交道,是最終呈現給用戶的界面,如註冊頁面、登錄頁面等都屬於表現層。其實業務邏輯層和數據訪問層都是為表現層忙活的,表現層是最終的結果。表現層使用UI表示。

根據經典.NET三層的功能和作用,使用Visual Studio 2019 IDE開發工具搭建該項目的結果,UI層採用ASP.NET MVC 5應用程式,BLL和DAL採用C#類庫,增加了數據模型層,用於各層之間通信。

VS2019的解決方案中可以存放多個項目,每個項目根據框架的需要而創建,對於類庫來說,主要是一些C#代碼,最終提供給UI層調用和使用。

三層創建完成之後,還需要添加引用,引用關係如下:

DAL層引用Models層。BLL層引用DAL層和Models層。UI層引用BLL層和Models層。

02第2節:資料庫設計

這裡主要講解如何將ASP.NET MVC 5融入到經典.NET三層架構中實現基本的增刪改查操作,這是所有軟體系統的核心基礎功能,因此,這裡以一個表為例子,把三層和MVC5徹底講解清楚。

這裡以學生(Student)表為例,表結構如下:

在此表結構中,創建了8個欄位,其中Id是GUID類型,為主鍵。有了表結構,我們就可以通過.NET MVC 5應用程式向表中添加數據和獲取數據了。

03第3節:數據模型

這裡我們將數據模型(主要與資料庫交互)與視圖模型(主要與視圖交互)分開,一開始就養成這種分離的習慣,在日後的大型項目開發中,能更靈活的控制視圖中的數據與數據模型中的數據交互。

學生數據模型StudentDataModel完整原始碼如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Yidosoft.Edu.Models{/// <summary>/// 實體模型/// </summary>public class StudentDataModel{/// <summary>/// 唯一標識/// </summary>public Guid Id { get; set; }/// <summary>/// 姓名/// </summary>public string Name { get; set; }/// <summary>/// 郵箱/// </summary>public string Email { get; set; }/// <summary>/// 年齡/// </summary>public int Age { get; set; }/// <summary>/// 手機號碼/// </summary>public string PhoneNumber { get; set; }/// <summary>/// 密碼/// </summary>public string Pwd { get; set; }/// <summary>/// 創建時間/// </summary>public DateTime CreateTime { get; set; }/// <summary>/// 性別/// </summary>public bool Sex { get; set; }}}

StudentDataModel類中的屬性名稱和數據類型都是與SQL Server資料庫中MvcStudent表中的欄位一一對應的。

04第4節:視圖模型

ASP.NET MVC 5中,視圖模型主要在視圖中使用,具有模型驗證功能。視圖模型放在MVC項目UI層的Models文件夾下。視圖模型中的數據也是來自數據模型,只不過,視圖模型中的數據是根據視圖需要而組建的,視圖模型中的數據可能是來自一張表,也可能是來自多張表。且還可以在視圖模型中做一些簡單的數據轉換。

UI層的StudentViewModel視圖模型完整C#原始碼如下:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.ComponentModel.DataAnnotations;namespace Yidosoft.Edu.Mvc5.Models{public class StudentViewModel{[Display(Name="姓名")][Required(ErrorMessage="請輸入{0}。")]public string Name { get; set; }[Display(Name="郵箱")][Required][EmailAddress(ErrorMessage="{0}格式不正確。")]public string Email { get; set; }[Display(Name="年齡")][Required][Range(1,150)]public int Age { get; set; }[Display(Name="手機號")][Required][RegularExpression("^1[0-9]{10}$")]public string PhoneNumber { get; set; }[Display(Name="密碼")][Required][StringLength(8,MinimumLength=2)]public string Pwd { get; set; }[Display(Name="確認密碼")][Required][StringLength(8,MinimumLength=2)][Compare("Pwd")]public string ConfirmPwd { get; set; }[Display(Name="性別")][Required]public string Sex { get; set; }public Guid Id { get; set; }}}

這裡使用了System.ComponentModel.DataAnnotations命名空間,可以在屬性上添加模型驗證特性,如必填、限制字符串長度、手機號驗證等。這樣做的好處是,無需我們再編寫JavaScript代碼實現客戶端驗證,模型驗證幫我們實現了雙重驗證。

05第5節:功能開發

一、顯示數據功能

這裡使用的控制器是StudentController,所有關於學生相關的操作都放在該控制器中。一般情況下,一個控制器對應於一個表的操作,如CRUD操作都是在同一個控制器中操作的。並且還會對應訪問的URL地址,這樣不管是開發者,還是訪問者,都很清析明了。

在UI層的「Controllers」文件夾中添加StudentController控制器,並編寫如下C#代碼:

/// <summary>/// 顯示數據/// </summary>/// <returns></returns>public ActionResult List(){List<StudentViewModel> studentList = new List<StudentViewModel>();SqlDataReader sdr = sBLL.GetAllData();while(sdr.Read()){StudentViewModel vModel = new StudentViewModel();vModel.Id = sdr.GetGuid(0);vModel.Name = sdr.GetString(1);vModel.Email = sdr.GetString(2);vModel.Age = sdr.GetInt32(3);vModel.PhoneNumber = sdr.GetString(4);vModel.Pwd = sdr.GetString(5);object sex = sdr["Sex"];if(sex.ToString()!=""){vModel.Sex = sdr.GetBoolean(7) == true ? "男" : "女";}studentList.Add(vModel);}return View(studentList);}

這裡使用了已封裝好的DBHelper類庫操作資料庫,且將數據模型轉換為視圖模型,也可以將DataTable轉換為可枚舉的類型。然後使用Linq查詢並返回可以在視圖中遍歷的數據類型。

DataTable dt = sBLL.GetAllDataInfo();var xDT = from d in dt.AsEnumerable()select new StudentViewModel{Name = d.Field<string>("Name"),Email = d.Field<string>("Email")};return View(xDT);

使用IEnumerable類型方便查詢,並且還可以將ADO.NET中的數據進行處理後再顯示到頁面上。

@model IEnumerable<Yidosoft.Edu.Mvc5.Models.StudentViewModel><div><table><tr style="background-color:#808080;color:#fff;"><td>姓名</td><td>性別</td><td>郵箱</td><td>操作</td></tr>@foreach (var v in Model){<tr><td>@v.Name</td><td>@v.Sex</td><td>@v.Email</td><td><a href="javascript:del('@v.Id')">刪除</a><input type="button" value="刪除" onclick="javascript: del('@v.Id')" /></td></tr>}</table></div>

當資料庫中的數據通過ADO.NET技術傳遞給視圖模型之後,視圖模型作為對象傳遞給視圖,那麼在視圖中就可以輕鬆的使用@model獲取數據並顯示在頁面上。

二、添加數據功能

對於在ASP.NET MVC 5中實現添加數據的功能,需要兩個相同的操作方法在控制器中,一個是用於GET請求的獲取數據,一個是用於POST請求的提交數據。

由於我們首先需要打開填寫數據的頁面,先填寫表單數據,此時就要使用GET請求。當填寫完數據提交時,就需要POST請求。

Add()操作方法的C#完整代碼如下:

/// <summary>/// 顯示添加頁面/// </summary>/// <returns></returns>public ActionResult Add(){return View();}/// <summary>/// 提交表單數據/// </summary>/// <param name="viewModel"></param>/// <returns></returns>[HttpPost]public ActionResult Add(StudentViewModel viewModel){StudentDataModel dModel = new StudentDataModel();dModel.Id = Guid.NewGuid();dModel.Name = viewModel.Name;dModel.Email = viewModel.Email;dModel.PhoneNumber = viewModel.PhoneNumber;dModel.Pwd = viewModel.Pwd;dModel.Sex = viewModel.Sex == "男" ? true : false;dModel.CreateTime = DateTime.Now;dModel.Age = viewModel.Age;int r = sBLL.CreateData(dModel);ViewBag.r = r;return View();}

在Views文件夾下添加對應的視圖,並編寫如下代碼:

@{Layout = null;}@model Yidosoft.Edu.Mvc5.Models.StudentViewModel<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width" /><title>添加學生基本信息</title><script src="~/Scripts/jquery-1.10.2.js"></script><script src="~/Scripts/jquery.validate.js"></script><script src="~/Scripts/jquery.validate.unobtrusive.js"></script><link href="~/Content/bootstrap.css" rel="stylesheet" /><link href="~/Content/Site.css" rel="stylesheet" /></head><body><div>@using (Html.BeginForm("Add", "Student", FormMethod.Post)){<table><tr><td>姓名</td><td>@Html.TextBoxFor(m => m.Name)</td><td>@Html.ValidationMessageFor(m => m.Name)</td></tr><tr><td>郵箱</td><td>@Html.TextBoxFor(m => m.Email)</td><td>@Html.ValidationMessageFor(m => m.Email)</td></tr><tr><td>年齡</td><td>@Html.TextBoxFor(m => m.Age)</td><td>@Html.ValidationMessageFor(m => m.Age)</td></tr><tr><td>手機號</td><td>@Html.TextBoxFor(m => m.PhoneNumber)</td><td>@Html.ValidationMessageFor(m => m.PhoneNumber)</td></tr><tr><td>@Html.LabelFor(m => m.Pwd)</td><td>@Html.PasswordFor(m => m.Pwd)</td><td>@Html.ValidationMessageFor(m => m.Pwd)</td></tr><tr><td>@Html.LabelFor(m => m.ConfirmPwd)</td><td>@Html.Password("ConfirmPwd")</td><td>@Html.ValidationMessageFor(m => m.ConfirmPwd)</td></tr><tr><td>@Html.LabelFor(m => m.Sex)</td><td>@Html.RadioButtonFor(m => m.Sex, "男") 男@Html.RadioButtonFor(m => m.Sex, "女", new { @checked = "checked" }) 女</td><td></td></tr><tr><td>&nbsp;</td><td><input type="submit" value="提交" /> </td><td>&nbsp;</td></tr></table>}</div></body></html>

對於添加數據的視圖,這裡全部使用了Html輔助方法,且與視圖模型融合在一起對數據進行添加。

三、刪除數據功能

對於ASP.NET MVC5實現的刪除數據功能,我們只需要在控制器中使用一個刪除的方法即可,刪除成功後再轉到顯示數據的頁面上去,這樣顯示頁面上會重新獲取數據,刪除後的數據將不顯示。

@{Layout = null;}@model IEnumerable<Yidosoft.Edu.Mvc5.Models.StudentViewModel><!DOCTYPE html><html><head><meta name="viewport" content="width=device-width" /><title></title><link href="~/Content/bootstrap.css" rel="stylesheet" /><script src="~/Scripts/jquery-1.10.2.js"></script><script type="text/javascript">function del(obj) {var b = confirm("是否刪除?" + obj);if(b){location.href = "/Student/Del/"+obj;}}</script></head><body><div><table><tr style="background-color:#808080;color:#fff;"><td>姓名</td><td>性別</td><td>郵箱</td><td>操作</td></tr>@foreach (var v in Model){<tr><td>@v.Name</td><td>@v.Sex</td><td>@v.Email</td><td><a href="javascript:del('@v.Id')">刪除</a><input type="button" value="刪除" onclick="javascript: del('@v.Id')" /></td></tr>}</table></div></body></html>

刪除時,只需要傳入Id即可,在SQL Server資料庫中,根據主鍵ID就可以刪除行數據。控制器中刪除操作方法的C#代碼如下:

/// <summary>/// 刪除數據/// </summary>/// <param name="id"></param>public ActionResult Del(string id){RedirectToRouteResult vR = null;if (!string.IsNullOrWhiteSpace(id)){int row = sBLL.DelData(id);if (row >= 1){vR= RedirectToAction("List");}else{vR = RedirectToAction("Error");}}return vR;}

這裡只是將在ASP.NET MVC 5框架中,對於軟體系統的顯示數據、添加數據和刪除數據功能,提供了核心代碼,這些核心代碼可以拿來直接在項目中使用。

通過上面的學習,我們知道通過三層如何與MVC 5框架對接,並填充視圖模型,通過強類型視圖將數據呈現給表現層,能夠清楚的知道MVC 5是如何工作的,為將來開發更大的系統做好準備。

相關焦點

  • 自學MVC看這裡——全網最全ASP.NET MVC 教程匯總
    ASP.NET MVC 5 入門指南匯總ASP.NET MVC 5– 使用Wijmo MVC 5模板1分鐘創建應用ASP.NET MVC 5 - 查詢Details和Delete方法ASP.NET MVC 5 - 給數據模型添加校驗器ASP.NET MVC 5 - 給電影表和模型添加新欄位ASP.NET MVC 5
  • 如何實現Asp與Asp.Net共享Session
    在.net中,Session的存儲機制已經與Asp的存儲機制不一樣,雖然可以在同一個IIS下同時運行asp與aspx,但是它們之間不能傳遞Session。簡單說明原理,asp與asp.net之間的Session統一存儲在資料庫中來實現共享 1、創建數據表 打開SQL Server查詢分析器,運行以下腳本來創建數據表,數據表名為SessionState if exists (select * from sysobjects where id = object_id
  • asp.net連接MySQL,在GridView上實現增刪改查:前臺配置參數實現
    asp.net中如果想要在GridView控制項上實現增刪改查,通過給GridView添加數據源就可以實現,前提是使用的資料庫必須是數據源中有的。在SqlDataSource控制項中添加數據源最方便的是使用SQLServer、Access資料庫,但是有很多項目也會用到mysql資料庫,但是SqlDataSource中沒有提供mysql資料庫的連接,所以如果想要在GridView中通過配置來實現增刪改查mysql資料庫,是比SQLserver資料庫複雜。
  • 「謝燦asp.net三層架構」3、創建增刪改查及複雜操作的存儲過程
    《謝燦asp.net三層架構》系列教程由小燦燦IT首發百度平臺,希望對各位喜歡計算機的同學有所幫助!關注+分享+評論+點讚,是對我們最好的支持!有了您的支持,我們堅信我們會做得更好!存儲過程可以封裝複雜的資料庫操作,簡化操作流程,例如對多個表的更新,刪除等。可實現模塊化的程序設計,存儲過程可以多次調用,提供統一的資料庫訪問接口,改進應用程式的可維護性。
  • ASP.NET Core Identity Hands On(2)——註冊、登錄、Claim
    如果你熟悉 asp.net core ,那我猜你可能已經想到了沒錯 Options 就是 Di中的 Options在起作用。claim 的基本組成是 type和value,上面票據中左側的就是type右面就是value在 .net core 基礎類庫中是含有Claim的實現類的,它的位置是System.Security.Claims.Claim我們看一個真實的claim的例子{  "sub": "1234567890",  "name": "John Doe
  • asp.net core 5.0 中的 JsonConsole
    asp.net core 5.0 中的 JsonConsoleIntroasp.net core 5.0 中日誌新增了 JsonConsole,還是輸出日誌到 Console,但是會應用 Json 格式的一個 Formatter 把日誌格式化成 json 再輸出到控制臺
  • 在ASP.NET MVC中創建和列印PDF
    PDF列印演示此應用程式是使用ASP.NET MVC 5與Visual Studio 2015或Community Edition開發的。以下步驟提供了演示實現的其他信息。在此資料庫中,使用以下腳本添加名為EmployeeInfo的新表在上表中,HRA,TA,DA,GrossSalary,TDS,NetSalary列是使用Salary列基於公式生成的。在此表中添加測試數據。
  • ASP.Net安裝簡明手冊
    首先,運行機制不同,asp屬於一種解釋型的編程框架,它的核心是vbs和js,受這兩種腳本語言的限制,決定了asp先天不足,它無法進行象傳統程式語言那樣的底層操作,所以如果你需要進行一些諸如socket、文件等的操作時不得不藉助於用其他傳統程式語言如C++、VB、JAVA等編寫的組件,並且由於它是解釋執行的,所以在運行效率上大打折扣。
  • NET開發-在DBHelper中封裝ADO.NET對象,並調用執行添加數據功能
    、刪除、更新和獲取數據,可以重複使用,減少代碼的編寫。添加數據功能在上面封裝好了DBHelper類庫,就可以在ASP.NET WebForms應用程式中實現對SQL Server資料庫的添加功能。對於添加操作,只需要將頁面上控制項的值使用C#代碼接收,然後將接收的值得使用SQL語句添加到資料庫即可。
  • NET開發-在ASP.NET WebForm應用程式中使用C#操作Label控制項的屬性
    概述Label控制項是標籤控制項,是ASP.NET伺服器端控制項,用於顯示文本值,對應於HTML中的span標記。在ASP.NET WebForm框架中,Label控制項是微軟對HTML的span標記進行了封裝,使可以在後臺代碼中,使用C#代碼給span標記賦值。在Visual Studio中,可以在「工具欄」中直接拖拽Label控制項到Web窗體上。
  • 目前中國網站服務端開發主要有PHP、asp.net、Java三種語言
    通過各招聘網站招聘程式設計師的類型統計得出結果是目前中國網站服務端開發主要有PHP、asp.net、Java三種語言,其他佔少數有潛力有C#,C++等,而Python也開始被開發者使用在服務端開發。從招聘的數據信息顯示,PHP編程開發主要集中在中小網站,個人站點,個人博客等開發,而政府網站更喜歡asp.net開發,Java則主要在電商,支付系統,安全數據的等方面有優勢。
  • 簡明 ASP.NET Core 手冊
    這本書本身也會由於修訂和內容的增加而頻繁更新。如果你閱讀的是 PDF、電子書,或者列印版,請查閱官網(littleasp.net/book)的版本更新。有關版本信息和更新內容,請查閱本書的最後一頁。已經被翻譯成其它語言:The Little ASP.NET Core Book (English -- original version)https://www.recaffeinate.co/book/ASP.NET Core El Kitabı (Turkish)https://sahinyanlik.gitbooks.io/kisa-asp-net-core-kitabi
  • .net域名簡介
    .net域名適用範圍NET代表「網絡」,.net域名建議適用於網際網路、電子郵件和網絡服務提供商。如果要提供網際網路、網絡、資料庫託管、電子郵件託管或類似服務,則應使用.net 後綴的域名。如果適合行業品牌,仍然可以使用.net 域名。
  • .net的域名好嗎
    .net的域名好嗎?.net域名確實不如.com域名擴展受歡迎。然而,它有很多好處,註冊網站的.net域名或將.net作為選擇域名是明智的選擇。域名保護許多專家建議,除了.com後綴之外,還要購買網站的.net擴展名。這將避免競爭對手試圖使用相同的網站名稱與.net擴展名實施欺詐或冒充網站等行為。
  • ASP.NET Core 3.1中HTTPS的配置
    如果配置HTTPS成了迫在眉睫的問題,基於Nginx、Apache、Tomcat等Web伺服器對HTTPS支持都很友好,配置比較簡單,但是對於使用C#和ASP.NET Core做Web開發的同學可能還有一定的困惑,本文我們就來說說在ASP.NET Core環境下的HTTPS配置。HTTPS重定向中間件在asp.net中,默認情況下啟用https。
  • NET開發-ASP.NET WebForm應用程式中,使用C#操作TextBox的屬性
    ID屬性ID屬性是每個asp.net每個伺服器控制項必須具備的屬性,用來指定控制項的唯一ID值。TextBox控制項的ID值最好以「txt+有意義的單詞」組成,便於後臺C#代碼中識別並賦值和獲取值。1.2.2. Text屬性TextBox控制項的Text屬性用於給文本框賦值或取值,以及獲取用戶輸入的值。
  • DenseNet——CNN經典網絡模型詳解(pytorch實現)
    DenseNet——CNN經典網絡模型詳解(pytorch實現)一個CV小白,寫文章目的為了讓和我意義的小白輕鬆如何,讓大佬鞏固基礎(手動狗頭),大家有任何問題可以一起在評論區留言討論~一、概述論文:Densely Connected Convolutional Networks 論文連結:https://arxiv.org/pdf
  • ASP.NET定製簡單的錯誤處理頁面
    首頁 > 語言 > 關鍵詞 > asp最新資訊 > 正文 ASP.NET定製簡單的錯誤處理頁面
  • .NET Standard 2.1 發布,進一步使 .NET 實現一致
    微軟在11月5日發布了 .NET Standard 2.1 ,開發團隊計劃在 .NET Standard 2.1 中添加大約 3000
  • ASP.NET Core MVC 源碼學習:MVC 啟動流程詳解
    ASP.NET Core 源碼地址:https://github.com/aspnet/mvcGetting StartedASP.NET Core MVC 源碼程序主要包含幾部分組成:Mvc.Core :源碼的核心實現,包含認證,過濾,模型綁定,路由等等...