Asp.net mvc 知多少(六)
本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可訪問http://www.dotnettricks.com/free-ebooks自行下載。該書主要分為兩部分,ASP.NET MVC 5、ASP.NET WEB API2。本書最大的特點(diǎn)是以面試問答的形式進(jìn)行展開。通讀此書,會(huì)幫助你對(duì)ASP.NET MVC有更深層次的理解。
由于個(gè)人技術(shù)水平和英文水平也是有限的,因此錯(cuò)誤在所難免,希望大家多多留言指正。
系列導(dǎo)航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)
本節(jié)主要講解模型驗(yàn)證以及前端的優(yōu)化技術(shù)
Q61. 什么是ASP.NET MVC中的Data Annotations(數(shù)據(jù)注解) ?
Ans. Data validation(數(shù)據(jù)注解)是開發(fā)web應(yīng)用程序的一個(gè)關(guān)鍵概念。在 Asp.net MVC中我們可以很容易通過將數(shù)據(jù)注解特性申明到Model類,既可以實(shí)現(xiàn)驗(yàn)證。Data Annotation 特性是位于System.ComponentModel.DataAnnotations命名空間下,適用于Asp.net 項(xiàng)目(比如Asp.net web application & website, Asp.net MVC, Web forms ),同時(shí)也適用于Entity framework ORM 模型。
Data Annotations幫助我們?yōu)閙odel類或?qū)傩远x規(guī)則進(jìn)行數(shù)據(jù)驗(yàn)證和顯示合適的提示信息給終端客戶。
Data Annotation 驗(yàn)證特性:
- DataType - 為屬性指定數(shù)據(jù)類型
- DisplayName - 為屬性指定顯示名稱
- DisplayFormat - 為屬性指定顯示格式
- Required - 限制屬性為必錄
- ReqularExpression - 用正則表達(dá)式驗(yàn)證屬性的值是否滿足要求
- Range - 限制屬性的值在某一區(qū)間
- StringLength - 指定string類型屬性的最小和最大長(zhǎng)度
- MaxLength - 指定string類型屬性的最大長(zhǎng)度
- Bind - 添加參數(shù)或表單數(shù)據(jù)到model屬性時(shí),指定字段將會(huì)被添加到或排除
- ScaffoldColumn - 隱藏表單編輯界面的指定字段
Q62. Asp.Net MVC如何進(jìn)行服務(wù)端驗(yàn)證?
Ans. 在與用戶敏感信息交互之前服務(wù)端驗(yàn)證至關(guān)重要。不管客戶端是否驗(yàn)證,我們?cè)诜?wù)端都必須進(jìn)行驗(yàn)證。用戶可以通過禁用客瀏覽器腳本或采取其他方式來跳過客戶端驗(yàn)證。在這種情況下,服務(wù)端的驗(yàn)證就必不可少,用來驗(yàn)證用戶的臟輸入來保證數(shù)據(jù)安全。
ASP.NET MVC中,在服務(wù)端有兩種方式來對(duì)model進(jìn)行驗(yàn)證:
** Explicit Model Validation (顯示模型驗(yàn)證)**
就是使用傳統(tǒng)的 IF..Else..IF 語(yǔ)句對(duì)model進(jìn)行驗(yàn)證。用這種方式,你需要一個(gè)一個(gè)的檢查要檢查的屬性。
如果model的屬性是非期望的,在ModelState中插入錯(cuò)誤信息。
** Model Validation with Data Annotations (使用數(shù)據(jù)注解進(jìn)行模型驗(yàn)證)**
Data Annotations (數(shù)據(jù)注解)是在 .NET 3.5 SP1中引入的. 有一系列的特性類定義在System.ComponentModel.DataAnnotations 程序集。Data Annotations 允許我們使用元數(shù)據(jù)修飾模型類。這些元數(shù)據(jù)描述一系列規(guī)則來對(duì)屬性進(jìn)行驗(yàn)證 :
public class UserViewModel {[Required(ErrorMessage = "Please Enter Email Address")][RegularExpression(".+@.+\\..+", ErrorMessage = "Please Enter Correct Email Address")]public string UserName { get; set; }[Required(ErrorMessage = "Please Enter Password")][StringLength(50, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]public string Password { get; set; } }Q63. 如何判斷Model State中是否有錯(cuò)誤?
Ans. 當(dāng)服務(wù)端驗(yàn)證有錯(cuò)誤時(shí),錯(cuò)誤信息將保存在。因此通過使用
ModelState.IsValid 屬性即可驗(yàn)證model state。
Q64. 在ASP.NET MVC中如何關(guān)閉和啟用客戶端驗(yàn)證 ?
Ans. 我們可以通過設(shè)置ClientValidationEnabled &
UnobtrusiveJavaScriptEnabled在應(yīng)用程序級(jí)別啟用和關(guān)閉客戶端驗(yàn)證。
如果需要開啟客戶端驗(yàn)證,以上兩個(gè)屬性都必須為true。
還可以在通過編程在代碼中啟用客戶端驗(yàn)證。
修改Global.asax中的Application_Start()事件去啟用關(guān)閉客戶端驗(yàn)證。
我們同時(shí)可以為某一view啟用及關(guān)閉客戶端驗(yàn)證。通過在view中的razor代碼塊中指定。view中的設(shè)置將覆蓋應(yīng)用程序級(jí)別的設(shè)置。
@using MvcApp.Models @{ViewBag.Title = "About";HtmlHelper.ClientValidationEnabled = false; } }Q65. 什么是CDN以及它有什么好處?
Ans. CDN代表內(nèi)容分發(fā)網(wǎng)絡(luò)。 它是部署在互聯(lián)網(wǎng)上多個(gè)數(shù)據(jù)中心的服務(wù)器分發(fā)系統(tǒng)。 它的目的是為了向終端客戶提供高可用性和高性能的內(nèi)容(比如jquery,bootstrap等開源類庫(kù)) 。
主要由三個(gè)流行的cdn:
優(yōu)點(diǎn)
Q66. 什么是 jquery.validate.unobtrusive.js?
Ans. 該插件是從ASP.NET MVC3引入的,通過使用組合的jquery驗(yàn)證和HTML5數(shù)據(jù)屬性在客戶端應(yīng)用數(shù)據(jù)模型驗(yàn)證。
Q67. 介紹ASP.NET MVC中的Bundling(捆綁)和Minification (微小)?
Ans. ASP.NET MVC4 和.NET Framework 4.5 提供捆綁和微小技術(shù)來減少對(duì)服務(wù)器的請(qǐng)求次數(shù)以及減少請(qǐng)求的CSS和JavaScript的大小,從而加快頁(yè)面加載時(shí)間。
A bundle是邏輯上的一組文件僅通過一次的http請(qǐng)求就完成加載。 可以通過調(diào)用BundleCollection類的Add()方法來為CSS和JavaScript來創(chuàng)建 style (樣式)和 script(腳本) bundle (捆綁)。所有的捆綁都是在
BundleConfig.cs 文件中創(chuàng)建。
Minification是一項(xiàng)用來移除JavaScript和CSS文件中不必要的字符(比如空格,換號(hào)符,制表符)和注釋來減小文件大小來加快網(wǎng)頁(yè)加載速度。 有很多種工具進(jìn)行微小(其中JSMin 和YUI 是最流行的兩款工具) 。
下面假設(shè)我們的頁(yè)面中有以下下CSS和JavaScript:
不使用捆綁和微小,頁(yè)面的加載統(tǒng)計(jì)
使用捆綁和微小,頁(yè)面的加載統(tǒng)計(jì)
@Styles.Render("~/Content/css") @Scripts.Render("~/bundles/jquery")Q68. 可以在ASP.NET MVC3 或 ASP.NET4.0中使用捆綁和微小(bundling and minification)嗎?
Ans. Microsoft.Web.Optimization程序集包含的System.Web.Optimization 命名空間提供了用來進(jìn)行捆綁和微小的技術(shù)。引用這個(gè)程序集即可在SP.NET MVC3 或 ASP.NET4.0中使用這項(xiàng)技術(shù)。
Q69. Bundling(捆綁)是如何使用瀏覽器的緩存能力?
Ans. 瀏覽器緩存資源是基于URLs的。當(dāng)一個(gè)web頁(yè)面請(qǐng)求一個(gè)資源,瀏覽器首先去檢查它的緩存是否存在資源與請(qǐng)求的URL匹配。如果匹配,則直接使用緩存。
因此無論合適你改變CSS和JS文件它都不會(huì)在瀏覽器上有反映。對(duì)于這種情形,你需要強(qiáng)制瀏覽器去刷新/加載。
但是捆綁會(huì)自動(dòng)處理這種問題,通過為每一個(gè)捆綁添加一個(gè)hash code作為url的查詢參數(shù)。無論何時(shí)你只要改變CSS和JS文件的內(nèi)容那么就會(huì)產(chǎn)生一個(gè)新的hash code,并自動(dòng)呈現(xiàn)到頁(yè)面。這樣,瀏覽器就會(huì)看到一個(gè)不同的Url,然后就會(huì)重新去獲取新的CSS和JS。
總結(jié)
以上是生活随笔為你收集整理的Asp.net mvc 知多少(六)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到风浪很大什么意思
- 下一篇: SPOJ QTREE6 lct