一、數(shù)據(jù)驗(yàn)證
數(shù)據(jù)驗(yàn)證的步驟在模型類(lèi)中添加與驗(yàn)證相關(guān)的特性標(biāo)記在客戶端導(dǎo)入與驗(yàn)證相關(guān)的js文件和css文件使用與驗(yàn)證相關(guān)的Html輔助方法在服務(wù)器端判斷是否通過(guò)服務(wù)器端驗(yàn)證常用的驗(yàn)證標(biāo)記 ![](/d/20211017/f025edf68501b4cde5de3c00e06b63cc.gif)
Required:非空驗(yàn)證StringLength:驗(yàn)證字符串的長(zhǎng)度RegularExpression:正則表達(dá)式驗(yàn)證Compare:比較兩個(gè)字段的值是否相等Range:范圍驗(yàn)證Remote:服務(wù)器驗(yàn)證(需要在controller中編寫(xiě)返回值為JsonResult的Action)自定義驗(yàn)證標(biāo)記與驗(yàn)證相關(guān)的js文件
在ASP.NET MVC中提供了2套驗(yàn)證框架,分別是微軟驗(yàn)證框架和jquery驗(yàn)證框架.默認(rèn)啟用了jquery驗(yàn)證框架.
注意:這些js文件的順序不能顛倒;其中Site.css文件中定義了數(shù)據(jù)驗(yàn)證使用的樣式.
![](/d/20211017/af5172c96ca5616120374c3da0e97e76.gif)
驗(yàn)證相關(guān)的Html輔助方法
注意:1.必須使用Html.ValidationMessage()和Html.ValidationMessageFor()來(lái)顯示驗(yàn)證失效的提示信息;
2.被驗(yàn)證的控件(如文本框\下拉列表框等)必須使用Html輔助方法生成才有效.
![](/d/20211017/31854d79c288f14bab289efb281bc2cf.gif)
在服務(wù)器端判斷模型是否通過(guò)了驗(yàn)證(服務(wù)器端驗(yàn)證)
頁(yè)面中如果使用了MVC驗(yàn)證功能,那么在后臺(tái)對(duì)應(yīng)的Action中必須通過(guò)ModelState.IsValid判斷是否通過(guò)了服務(wù)器端驗(yàn)證。只有通過(guò)了服務(wù)器端驗(yàn)證,才能執(zhí)行其他的業(yè)務(wù)邏輯代碼
![](/d/20211017/7bf2f35bc5142542963020320573335f.gif)
使用要點(diǎn):
被驗(yàn)證的標(biāo)記不能是純html,必須使用相應(yīng)的html輔助方法
例如:Html.TextBoxFor(model=>model.UserName),則驗(yàn)證有效;
input type=”text” id=”UserName” name=”UserName” />,則驗(yàn)證無(wú)效;
必須使用相應(yīng)的html輔助方法顯示驗(yàn)證消息(Html.ValidationMessage)被驗(yàn)證的控件必須放在有html.beginform的輔助方法內(nèi)部(不能是純form>標(biāo)記).客戶端驗(yàn)證是不安全的,容易被禁用或欺騙,所以一定要在服務(wù)器端判斷ModelState.IsValid是否為true.
Action與View的數(shù)據(jù)傳遞
在某些情況下,視圖需要顯示多份數(shù)據(jù)(比如被修改的員工信息\崗位列表\部門(mén)列表),但是Action在返回視圖時(shí),View()方法只能傳遞1個(gè)object類(lèi)型的數(shù)據(jù),那么其他的數(shù)據(jù)該如何傳遞?
ASP.NET MVC為我們提供了3種方案:ViewData\TempData\ViewBag.
重要提示:在Controller和View中都有這三個(gè)屬性,在Controller的相應(yīng)屬性中存放了數(shù)據(jù)后,就可以在View的相應(yīng)屬性中提取這些數(shù)據(jù)。
ViewData
ViewData是一個(gè)字典類(lèi)型.向里面添加數(shù)據(jù)時(shí)要以鍵值對(duì)的形式添加.
首先在Action中向ViewData中添加,其次就可以在View中訪問(wèn)ViewData來(lái)提取數(shù)據(jù).
![](/d/20211017/59f81ac4f69f43606aea921f90fb5bda.gif)
ViewBag
ViewBag是一個(gè)動(dòng)態(tài)類(lèi)型的屬性。在ASP.NET MVC 3.0中才加入了ViewBag屬性.
動(dòng)態(tài)類(lèi)型:dynamic,就是可以事先不為其定義屬性,通過(guò)直接給屬性賦值的方式就可以隨時(shí)為它添加新的屬性.
下面的代碼演示了向ViewBag中存放cls和stu兩個(gè)對(duì)象,這兩個(gè)對(duì)象分別放到了屬性ClassInfo和StudentInfo中。
![](/d/20211017/096619017dc16db156814c9137cc3524.gif)
TempData
TempData的用法和ViewData很相似,都是字典類(lèi)型.那他們的區(qū)別是什么?
ViewData中存儲(chǔ)的數(shù)據(jù)僅僅對(duì)本次訪問(wèn)的當(dāng)前action有效.而TempData中存儲(chǔ)的數(shù)據(jù),除了對(duì)本次訪問(wèn)的當(dāng)前action有效外,還對(duì)本次訪問(wèn)的其他action有效(比如在Action1中向TempData中存放了數(shù)據(jù),即使從Action1跳轉(zhuǎn)至Action2后,仍然可以在Action2中從TempData提取數(shù)據(jù)。而ViewData和ViewBag都無(wú)法做到這一點(diǎn)).因此,TempData中數(shù)據(jù)的生命周期比ViewData|ViewBag中的生命周期要長(zhǎng).
ActionResult的實(shí)現(xiàn)類(lèi)
在ASP.NET MVC模型中,Action用于響應(yīng)用戶的各種請(qǐng)求,比如向客戶端返回html文檔、html片段、json數(shù)據(jù)、純文本、文件等結(jié)果。在ASP.NET MVC中通過(guò)在Action(行為或操作)方法中返回ActionResult類(lèi)型的對(duì)象來(lái)實(shí)現(xiàn)向客戶端響應(yīng)上面的各種結(jié)果。
ActionResult類(lèi)是個(gè)抽象類(lèi)(抽象類(lèi)無(wú)法直接被實(shí)例化).
ActionResult有很多實(shí)現(xiàn)類(lèi),不同的實(shí)現(xiàn)類(lèi)用于響應(yīng)客戶端不同的結(jié)果。并且在Controller類(lèi)中提供了大量的輔助方法,這些輔助方法可以快速的創(chuàng)建各種ActionResult.
在實(shí)際開(kāi)發(fā)中,我們更多的是使用Controller類(lèi)中的輔助方法,而非自己手工創(chuàng)建ActionResult的實(shí)現(xiàn)類(lèi)。
ViewResult類(lèi)
ViewResult類(lèi)的作用是向客戶端響應(yīng)View目錄中一個(gè)視圖文件.
Controller類(lèi)中提供了View()方法,來(lái)快速的返回一個(gè)ViewResult類(lèi)對(duì)象.
ContentResult類(lèi)
該類(lèi)用于向客戶端返回一段文本內(nèi)容(純文本\HTML...).
在Controller類(lèi)中的輔助方法為:Controller.Content(string content);
![](/d/20211017/afc2e12f24a531bb6b7b542db3ee4525.gif)
RedirectToRouteResult類(lèi)
該類(lèi)的作用是從當(dāng)前action跳轉(zhuǎn)至其他action.
在Controller類(lèi)中的輔助方法為:RedirectToAction(“ActionName”, “ControllerName”)
RedirectResult類(lèi)
在服務(wù)器端從當(dāng)前Action跳轉(zhuǎn)到其他URL地址.
在Controller類(lèi)中的輔助方法為:Controller.Redirect(string url)
![](/d/20211017/172c924326b7b794becbc1505db0cf94.gif)
JsonResult類(lèi)
該類(lèi)用于向客戶端返回一段Json格式的字符串.
在Controller類(lèi)中的輔助方法為:Controller.Json(object data);
注意:默認(rèn)情況下mvc拒絕響應(yīng)以get方式發(fā)送的ajax請(qǐng)求,需要使用JsonRequestBehavior.AllowGet。
![](/d/20211017/9749e8b1273cf46be5d6fcdb4938ab8f.gif)
PartialViewResult類(lèi)
該類(lèi)的作用是向客戶端響應(yīng)Views目錄的一個(gè)分部視圖文件。分部視圖就是只包含html片段的視圖文件.
在Controller類(lèi)中的輔助方法為:Controller.PartialView();
![](/d/20211017/b0d3d971a0d1f6c6f5e97cd252409923.gif)
下圖演示了在創(chuàng)建視圖文件時(shí),如何創(chuàng)建一個(gè)分部視圖文件(勾選“創(chuàng)建為分部視圖”復(fù)選框):
![](/d/20211017/508869a3a0b038fa90d465c16cd6eb5f.gif)
FilePathResult類(lèi)
該類(lèi)用于實(shí)現(xiàn)文件下載.
在Controller類(lèi)中的輔助方法為:Controller.File(string filePath, string contentType, string fileName);
![](/d/20211017/43ed409d359bb0c7eecc000cdc27473c.gif)
FileContentResult類(lèi)
將內(nèi)存中的字節(jié)數(shù)組當(dāng)做文件數(shù)據(jù)直接輸出到客戶端。適合在內(nèi)存中動(dòng)態(tài)生成文件或?qū)⑿∥募虞d到字節(jié)數(shù)組后輸出。
FileStreamResult類(lèi)
這個(gè)方法會(huì)先將文件全部讀入到服務(wù)器內(nèi)存中,進(jìn)行緩沖,然后再發(fā)送到客戶端。這樣做會(huì)非常消耗服務(wù)器內(nèi)存,因此應(yīng)避免使用該方法發(fā)送大文件。
EmptyResult類(lèi)
該類(lèi)用于向客戶端響應(yīng)一個(gè)空結(jié)果。
HttpStatusCodeResult類(lèi)
該類(lèi)用于向客戶端相應(yīng)指定的狀態(tài)碼.
HttpNotFoundResult類(lèi)就是HttpStatusCodeResult的子類(lèi),表示404這一狀態(tài)碼。
下面的是一些常用的http狀態(tài)碼:
404:資源未找到(表示客戶端請(qǐng)求服務(wù)器的資源地址不存在)
500:服務(wù)器內(nèi)部錯(cuò)誤(以5XX開(kāi)頭的表示服務(wù)器端在處理過(guò)程中出現(xiàn)的錯(cuò)誤)
200:成功(表示客戶端發(fā)送的請(qǐng)求被服務(wù)器成功的處理和響應(yīng))
其他
如何在aspx頁(yè)面中導(dǎo)入命名空間?
方式一:在指定的頁(yè)面添加%@ Import Namespace=”命名空間” %>
![](/d/20211017/a7f637f56de83806be8a5fda8e2c7fd7.gif)
方式二:在項(xiàng)目的web.config配置文件中添加pages---namespaces----add
![](/d/20211017/79fb1599664c19f3daa9e9d925945a8a.gif)
注:通過(guò)方式二添加的命名空間可以在所有的aspx頁(yè)面中使用;而方式一添加的命名空間只能在當(dāng)前頁(yè)面中使用.
您可能感興趣的文章:- ASP.NET MVC5驗(yàn)證系列之服務(wù)端驗(yàn)證
- ASP.NET MVC5添加驗(yàn)證(4)
- ASP.NET MVC5驗(yàn)證系列之Remote Validation
- ASP.NET MVC5驗(yàn)證系列之客戶端驗(yàn)證
- ASP.NET全棧開(kāi)發(fā)教程之在MVC中使用服務(wù)端驗(yàn)證的方法