一、資料驗證
資料驗證的步驟在模型類中添加與驗證相關的特性標記在用戶端匯入與驗證相關的js檔案和css檔案使用與驗證相關的Html輔助方法在伺服器端判斷是否通過伺服器端驗證常用的驗證標記
Required:非空驗證StringLength:驗證字串的長度RegularExpression:Regex驗證Compare:比較兩個欄位的值是否相等Range:範圍驗證Remote:伺服器驗證(需要在controller中編寫傳回值為JsonResult的Action)自訂驗證標記與驗證相關的js檔案
在ASP.NET MVC中提供了2套驗證架構,分別是微軟驗證架構和jquery驗證架構.預設啟用了jquery驗證架構.
注意:這些js檔案的順序不能顛倒;其中Site.css檔案中定義了資料驗證使用的樣式.
驗證相關的Html輔助方法
注意:1.必須使用Html.ValidationMessage()和Html.ValidationMessageFor()來顯示驗證失效的提示資訊;
2.被驗證的控制項(如文字框\下拉式清單方塊等)必須使用Html輔助方法產生才有效.
在伺服器端判斷模型是否通過了驗證(伺服器端驗證)
頁面中如果使用了MVC驗證功能,那麼在後台對應的Action中必須通過ModelState.IsValid判斷是否通過了伺服器端驗證。只有通過了伺服器端驗證,才能執行其他的商務邏輯代碼
使用要點:
被驗證的標記不能是純html,必須使用相應的html輔助方法
例如:Html.TextBoxFor(model=>model.UserName),則驗證有效;
<input type=”text” id=”UserName” name=”UserName” />,則驗證無效;
必須使用相應的html輔助方法顯示驗證訊息(Html.ValidationMessage)被驗證的控制項必須放在有html.beginform的輔助方法內部(不能是純<form>標記).用戶端驗證是不安全的,容易被禁用或欺騙,所以一定要在伺服器端判斷ModelState.IsValid是否為true.
Action與View的資料傳遞
在某些情況下,視圖需要顯示多份資料(比如被修改的員工資訊\崗位列表\部門列表),但是Action在返回視圖時,View()方法只能傳遞1個object類型的資料,那麼其他的資料該如何傳遞?
ASP.NET MVC為我們提供了3種方案:ViewData\TempData\ViewBag.
重要提示:在Controller和View中都有這三個屬性,在Controller的相應屬性中存放了資料後,就可以在View的相應屬性中提取這些資料。
ViewData
ViewData是一個字典類型.向裡面添加資料時要以索引值對的形式添加.
首先在Action中向ViewData中添加,其次就可以在View中訪問ViewData來提取資料.
ViewBag
ViewBag是一個動態類型的屬性。在ASP.NET MVC 3.0中才加入了ViewBag屬性.
動態類型:dynamic,就是可以事先不為其定義屬性,通過直接給屬性賦值的方式就可以隨時為它添加新的屬性.
下面的代碼示範了向ViewBag中存放cls和stu兩個對象,這兩個對象分別放到了屬性ClassInfo和StudentInfo中。
TempData
TempData的用法和ViewData很相似,都是字典類型.那他們的區別是什麼?
ViewData中儲存的資料僅僅對本次訪問的當前action有效.而TempData中儲存的資料,除了對本次訪問的當前action有效外,還對本次訪問的其他action有效(比如在Action1中向TempData中存放了資料,即使從Action1跳轉至Action2後,仍然可以在Action2中從TempData提取資料。而ViewData和ViewBag都無法做到這一點).因此,TempData中資料的生命週期比ViewData|ViewBag中的生命週期要長.
ActionResult的實作類別
在ASP.NET MVC模型中,Action用於響應使用者的各種請求,比如向用戶端返回html文檔、html片段、json資料、純文字、檔案等結果。在ASP.NET MVC中通過在Action(行為或操作)方法中返回ActionResult類型的對象來實現向用戶端響應上面的各種結果。
ActionResult類是個抽象類別(抽象類別無法直接被執行個體化).
ActionResult有很多實作類別,不同的實作類別用於響應用戶端不同的結果。並且在Controller類中提供了大量的輔助方法,這些輔助方法可以快速的建立各種ActionResult.
在實際開發中,我們更多的是使用Controller類中的輔助方法,而非自己手工建立ActionResult的實作類別。
ViewResult類
ViewResult類的作用是向用戶端響應View目錄中一個視圖檔案.
Controller類中提供了View()方法,來快速的返回一個ViewResult類對象.
ContentResult類
該類用於向用戶端返回一段常值內容(純文字\HTML...).
在Controller類中的輔助方法為:Controller.Content(string content);
RedirectToRouteResult類
該類的作用是從當前action跳轉至其他action.
在Controller類中的輔助方法為:RedirectToAction(“ActionName”, “ControllerName”)
RedirectResult類
在伺服器端從當前Action跳轉到其他URL地址.
在Controller類中的輔助方法為:Controller.Redirect(string url)
JsonResult類
該類用於向用戶端返回一段Json格式的字串.
在Controller類中的輔助方法為:Controller.Json(object data);
注意:預設情況下mvc拒絕響應以get方式發送的ajax請求,需要使用JsonRequestBehavior.AllowGet。
PartialViewResult類
該類的作用是向用戶端響應Views目錄的一個分部視圖檔案。分部視圖就是只包含html片段的視圖檔案.
在Controller類中的輔助方法為:Controller.PartialView();
下圖示範了在建立視圖檔案時,如何建立一個分部視圖檔案(勾選“建立為分部視圖”複選框):
FilePathResult類
該類用於實現檔案下載.
在Controller類中的輔助方法為:Controller.File(string filePath, string contentType, string fileName);
FileContentResult類
將記憶體中的位元組數組當做檔案資料直接輸出到用戶端。適合在記憶體中動態組建檔案或將小檔案載入到位元組數組後輸出。
FileStreamResult類
這個方法會先將檔案全部讀入到伺服器記憶體中,進行緩衝,然後再發送到用戶端。這樣做會非常消耗伺服器記憶體,因此應避免使用該方法發送大檔案。
EmptyResult類
該類用於向用戶端響應一個空結果。
HttpStatusCodeResult類
該類用於向用戶端相應指定的狀態代碼.
HttpNotFoundResult類就是HttpStatusCodeResult的子類,表示404這一狀態代碼。
下面的是一些常用的http狀態代碼:
404:資源未找到(表示用戶端請求伺服器的資源地址不存在)
500:伺服器內部錯誤(以5XX開頭的表示伺服器端在處理過程中出現的錯誤)
200:成功(表示用戶端發送的請求被伺服器成功的處理和響應)
其他
如何在aspx頁面中匯入命名空間?
方式一:在指定的頁面添加<%@ Import Namespace=”命名空間” %>
方式二:在項目的web.config設定檔中添加pages---namespaces----add
註:通過方式二添加的命名空間可以在所有的aspx頁面中使用;而方式一添加的命名空間只能在當前頁面中使用.