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。本書最大的特點是以面試問答的形式進行展開。通讀此書,會幫助你對ASP.NET MVC有更深層次的理解。
由于個人技術水平和英文水平也是有限的,因此錯誤在所難免,希望大家多多留言指正。
系列導航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)

本節主要講解模型驗證以及前端的優化技術

Q61. 什么是ASP.NET MVC中的Data Annotations(數據注解) ?
Ans. Data validation(數據注解)是開發web應用程序的一個關鍵概念。在 Asp.net MVC中我們可以很容易通過將數據注解特性申明到Model類,既可以實現驗證。Data Annotation 特性是位于System.ComponentModel.DataAnnotations命名空間下,適用于Asp.net 項目(比如Asp.net web application & website, Asp.net MVC, Web forms ),同時也適用于Entity framework ORM 模型。
Data Annotations幫助我們為model類或屬性定義規則進行數據驗證和顯示合適的提示信息給終端客戶。
Data Annotation 驗證特性:

  • DataType - 為屬性指定數據類型
  • DisplayName - 為屬性指定顯示名稱
  • DisplayFormat - 為屬性指定顯示格式
  • Required - 限制屬性為必錄
  • ReqularExpression - 用正則表達式驗證屬性的值是否滿足要求
  • Range - 限制屬性的值在某一區間
  • StringLength - 指定string類型屬性的最小和最大長度
  • MaxLength - 指定string類型屬性的最大長度
  • Bind - 添加參數或表單數據到model屬性時,指定字段將會被添加到或排除
  • ScaffoldColumn - 隱藏表單編輯界面的指定字段

Q62. Asp.Net MVC如何進行服務端驗證?
Ans. 在與用戶敏感信息交互之前服務端驗證至關重要。不管客戶端是否驗證,我們在服務端都必須進行驗證。用戶可以通過禁用客瀏覽器腳本或采取其他方式來跳過客戶端驗證。在這種情況下,服務端的驗證就必不可少,用來驗證用戶的臟輸入來保證數據安全。
ASP.NET MVC中,在服務端有兩種方式來對model進行驗證:
** Explicit Model Validation (顯示模型驗證)**

就是使用傳統的 IF..Else..IF 語句對model進行驗證。用這種方式,你需要一個一個的檢查要檢查的屬性。
如果model的屬性是非期望的,在ModelState中插入錯誤信息。

class HomeController : Controller
{[HttpPost]public ActionResult ExplicitServer(UserViewModel model){//Write custom logic to validate UserViewModelif (string.IsNullOrEmpty(model.UserName)){ModelState.AddModelError("UserName", "Please enter your 
name");}if (!string.IsNullOrEmpty(model.UserName)){Regex emailRegex = new Regex(".+@.+\\..+");if (!emailRegex.IsMatch(model.UserName))ModelState.AddModelError("UserName", "Please enter correct 
email address");}if (ModelState.IsValid) //Check model state{//TO DO:}}
}

** Model Validation with Data Annotations (使用數據注解進行模型驗證)**

Data Annotations (數據注解)是在 .NET 3.5 SP1中引入的. 有一系列的特性類定義在System.ComponentModel.DataAnnotations 程序集。Data Annotations 允許我們使用元數據修飾模型類。這些元數據描述一系列規則來對屬性進行驗證 :

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中是否有錯誤?
Ans. 當服務端驗證有錯誤時,錯誤信息將保存在。因此通過使用
ModelState.IsValid 屬性即可驗證model state。

[HttpPost]
public ActionResult DoSomething(UserViewModel model)
{if (ModelState.IsValid){//TODO:}
return View();
}

Q64. 在ASP.NET MVC中如何關閉和啟用客戶端驗證 ?
Ans. 我們可以通過設置ClientValidationEnabled &
UnobtrusiveJavaScriptEnabled在應用程序級別啟用和關閉客戶端驗證。

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

如果需要開啟客戶端驗證,以上兩個屬性都必須為true。
還可以在通過編程在代碼中啟用客戶端驗證。
修改Global.asax中的Application_Start()事件去啟用關閉客戶端驗證。

protected void Application_Start()
{//Enable or Disable Client Side Validation at Application LevelHtmlHelper.ClientValidationEnabled = true;HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

我們同時可以為某一view啟用及關閉客戶端驗證。通過在view中的razor代碼塊中指定。view中的設置將覆蓋應用程序級別的設置。

@using MvcApp.Models
@{ViewBag.Title = "About";HtmlHelper.ClientValidationEnabled = false;
}
}

Q65. 什么是CDN以及它有什么好處?
Ans. CDN代表內容分發網絡。 它是部署在互聯網上多個數據中心的服務器分發系統。 它的目的是為了向終端客戶提供高可用性和高性能的內容(比如jquery,bootstrap等開源類庫) 。
主要由三個流行的cdn:

// Google CDN 
<scripttype="text/javascript"src="http://ajax.googleapis.com/ajax/libs/jquery/1.9
.1/jquery.min.js"></script>
// Microsoft CDN
<scripttype="text/javascript"src="http://ajax.microsoft.com/ajax/jquery/jquery-
1.9.1.min.js"></script>
// JQuery CDN 
<scripttype="text/javascript"src="http://code.jquery.com/jquery-
1.9.1.min.js"></script>

優點

  1. 減少了客戶端對自己服務器的請求數。
  2. 節省了帶寬 ,且加載速度快。
  3. 自動緩存,當有一個請求從cdn中獲取資源,后續有相同請求,將直接從緩存中獲取。

Q66. 什么是 jquery.validate.unobtrusive.js?
Ans. 該插件是從ASP.NET MVC3引入的,通過使用組合的jquery驗證和HTML5數據屬性在客戶端應用數據模型驗證。


Q67. 介紹ASP.NET MVC中的Bundling(捆綁)和Minification (微小)?
Ans. ASP.NET MVC4 和.NET Framework 4.5 提供捆綁和微小技術來減少對服務器的請求次數以及減少請求的CSS和JavaScript的大小,從而加快頁面加載時間。

A bundle是邏輯上的一組文件僅通過一次的http請求就完成加載。 可以通過調用BundleCollection類的Add()方法來為CSS和JavaScript來創建 style (樣式)和 script(腳本) bundle (捆綁)。所有的捆綁都是在
BundleConfig.cs 文件中創建。

public class BundleConfig
{public static void RegisterBundles(BundleCollection bundles){bundles.Add(new
StyleBundle("~/Content/css").Include("~/Content/site.min.css","~/Content/mystyle.min.css"));bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery-1.7.1.min.js","~/Scripts/jquery.validate.min.js","~/Scripts/jquery.validate.unobtrusive.min.js"));}
}

Minification是一項用來移除JavaScript和CSS文件中不必要的字符(比如空格,換號符,制表符)和注釋來減小文件大小來加快網頁加載速度。 有很多種工具進行微小(其中JSMin 和YUI 是最流行的兩款工具) 。
下面假設我們的頁面中有以下下CSS和JavaScript:

<link href="~/Content/Site.css" rel="stylesheet"/>
<link href="~/Content/MyStyle.css" rel="stylesheet"/>
<script src="~/Scripts/jquery-1.7.1.js"></script>
<script src="~/Scripts/jquery-ui-1.8.20.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>

不使用捆綁和微小,頁面的加載統計

1240

使用捆綁和微小,頁面的加載統計

@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/jquery")

1240


Q68. 可以在ASP.NET MVC3 或 ASP.NET4.0中使用捆綁和微小(bundling and minification)嗎?
Ans. Microsoft.Web.Optimization程序集包含的System.Web.Optimization 命名空間提供了用來進行捆綁和微小的技術。引用這個程序集即可在SP.NET MVC3 或 ASP.NET4.0中使用這項技術。


Q69. Bundling(捆綁)是如何使用瀏覽器的緩存能力?
Ans. 瀏覽器緩存資源是基于URLs的。當一個web頁面請求一個資源,瀏覽器首先去檢查它的緩存是否存在資源與請求的URL匹配。如果匹配,則直接使用緩存。
因此無論合適你改變CSS和JS文件它都不會在瀏覽器上有反映。對于這種情形,你需要強制瀏覽器去刷新/加載。
但是捆綁會自動處理這種問題,通過為每一個捆綁添加一個hash code作為url的查詢參數。無論何時你只要改變CSS和JS文件的內容那么就會產生一個新的hash code,并自動呈現到頁面。這樣,瀏覽器就會看到一個不同的Url,然后就會重新去獲取新的CSS和JS。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396783.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構c語言版總結,數據結構:C語言常見算法總結

【1】求最大值與最小值.#includevoid main(){int num[5],max,min,i;printf(\"請輸入5個數字:\")for(i0;i<5;i)scanf(\"%d\",&num)maxnum[0];minnum[0];for(i1;i<5;i){if(maxmaxnum;if(min>num)minnum;}printf(\"最大值為:%d\",max)…

selenium選錯彈出層的下拉框

要先選中這個彈出層的form元素&#xff0c;再找下拉框 public void downSelectBox(){driver.get("https://www.imooc.com/user/setprofile");driver.findElement(By.className("pull-right")).click();try {Thread.sleep(2000);} catch (InterruptedExcept…

python面向過程是基于面向對象的_Python5.1-面向對象與面向過程

面向對象&#xff1a; 將數據與函數綁定在一起&#xff0c;進行封裝&#xff0c; 這樣能夠更快速的開發程序&#xff0c;減少了重復 代碼的重寫過程。 優點&#xff1a; 易維護、易復用、易擴展&#xff0c;由于面向對象有封裝、繼承、多態性的特性&#xff0c;可以設 計出低耦…

C語言 1A gt $20,C語言輸出 1到20 的階乘之和

除了調用庫&#xff0c;絕對找不到比這更精簡的代碼了.#include#includelong long getdata(long long n){long long sum 1;while(n){sum*n--;}return sum;}int main(){long long sum 0;long long nums 20;while(nums){sumgetdata(nums--);}printf("%lld",sum);}【…

PHP設計模式——策略模式

<?php /*** 策略模式* 策略模式幫助構建的對象不必自身包含邏輯&#xff0c;而是能夠根據需要利用其他對象中的算法* * 在能夠創建基于對象的&#xff0c;由自包含算法組成的可互換對象時&#xff0c;最佳的做法是使用策略模式 */ interface Math{function calc($op1,$op2)…

自動化收益評估

1.自動化測試實施成本&#xff1a;自動化實施成本 前期開發成本 后期維護成本 2.自動化測試收益 自動化測試的運行次數 3.自動化測試實施成本比&#xff1a;怕 k*n/&#xff08;cic2&#xff09; k--手工執行自動化用例所花費的時間成本&#xff0c;n--自動化測試用例執行的次…

32位PLSQL Developer無法登錄Oracle 11g 64位

問題&#xff1a; Windows10 64位下裝Oracle 11g 64位&#xff0c;PLSQL Developer使用出現以下問題&#xff1a; 1、Database下拉框為空&#xff1a; 2、強制輸入用戶名、密碼及Database&#xff0c;登錄彈出&#xff1a; 說明PLSQL Developer并不支持Oracle 64位客戶端連接。…

python快速排序函數_python算法-快速排序

快速排序&#xff1a; 學習快速排序&#xff0c;要先復習下遞歸&#xff1a; 遞歸的2個條件&#xff1a; 1. 函數自己調用自己 2.有一個退出的條件 練習&#xff1a;基于遞歸下一個函數&#xff0c;計算n&#xff01;并且求出當n等于10的值。 n&#xff01;n * n-1*…..*1 #enc…

c語言課程結束,【計算機】程序設計——C語言基礎秋季學期課程圓滿結束

2019年10月22日11&#xff1a;40&#xff0c;在同學們發自內心的掌聲中&#xff0c;課外培養中心開辦的程序設計——C語言基礎課程圓滿落幕。本次課程由計算機中心的陶媛老師予以指導&#xff0c;在短短五次課的時間里&#xff0c;同學們對學習C語言都有了更深的體悟。對于大部…

struts2獲取請求參數的三種方式及傳遞給JSP參數的方式

接上一篇文章package test;import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import java.util.*; public class HelloAction extends ActionSup…

iOS input被鍵盤遮擋

//解決第三方軟鍵盤喚起時底部input輸入框被遮擋問題var bfscrolltop document.body.scrollTop;//獲取軟鍵盤喚起前瀏覽器滾動部分的高度$("input.inputframe").focus(function(){//在這里‘input.inputframe’是我的底部輸入欄的輸入框&#xff0c;當它獲取焦點時觸…

CentOS6.5 搭建Open***服務器

前言&#xff1a;之前搭建過程中找了5-6個教程一起看&#xff0c;真是累&#xff0c;難道就沒有寫的詳細一點&#xff0c;一次成功的嗎&#xff0c;基于此花了一下午制作了本教程&#xff0c;實際測試2遍均成功&#xff0c;懶人福音。基礎環境&#xff1a;系統&#xff1a;Cent…

python如何在exel中編程_如何使用Python以編程方式將行添加到現有Excel表中

盡管有各種各樣的pythonexcel操作庫和資源&#xff0c;但我無法找到具體的解決方案。在 現在&#xff0c;我有一個表格存在的Excel模板文件。我想編寫一個Python程序來填充這個表。對于任何現有的Excel庫都可以這樣做嗎&#xff1f;模板Excel文件包含一個空表的工作表&#xff…

c語言文件分屏顯示,通用子目錄文件顯示方法

通用子目錄文件顯示方法在用CHKDS/V對磁盤子目錄及子目錄文件進行查找時,由于輸出顯示信息沒有分屏顯示,很容易錯過需要的信息,并且顯示信息沒有標記出隱藏的子目錄名及子目錄文件名,這樣就對進一步的子目錄及文件操作帶來許多不便。若輔以管道操作采用CHKDSK/V:|MORE,雖然可分…

hibernate--

正向工程&#xff1a; 通過創建Java代碼生成表文件 反向工程&#xff1a; 把表創建完自動生成代碼 轉載于:https://www.cnblogs.com/Catherinezhilin/p/9687126.html

Javascript、Dom、JQuery

1、Javascript JavaScript是一種屬于網絡的腳本語言,已經被廣泛用于Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。 1.1 存在形式 1 1、文件形式 2 <script src"../jqu…

mysql鏡像_Mysql phpmyadmin docker鏡像安裝

前言1.介于mysql的安裝很容易出現各種坑&#xff0c;本文使用 mysql 的docker鏡像2.為了方便管理mysql數據庫又不暴露mysql服務&#xff0c;所以使用phpmyadmin管理pull鏡像#下載mysql鏡像docker pull mysql#下載phpmyadmin鏡像docker pull phpmyadmin/phpmyadmin創建網絡docke…

linux安裝lrzsz,并使用rz sz 命令

1 centeos中使用 yum -y install lrzsz 命令下載并安裝 2 使用 rz 命令將windows文件上傳到linux 3 使用 sz 命令將linux文件下載到windows 例如&#xff1a; 4 tar zcvf dbq.tar.gz files/ 打包指定文件夾 5 sz dbq.tar.gz 轉載于:https://www.cnblogs.com/shaner/p/6387516.h…

c語言智能小車項目的感想,智能小車畢業論文(完整版)要點分析.doc

學 士 學 位 論 文系 別&#xff1a; 計算機科學與技術學科專業&#xff1a; 計算機科學與技術姓 名&#xff1a; 2011年 0月智能小車引導控制系統的設計與實現系 別&#xff1a; 計算機科學與技術學科專業&#xff1a;姓 名&#xff1a;2011年 0月智能小車引導控制系統的設計與…

慈不掌兵,義不行賈,爛好人難成大業!

兩個月前&#xff0c;朋友的創業公司倒閉了。 朋友是溫文爾雅的白面君子&#xff0c;有著光鮮的履歷和出眾的能力。和他聊天&#xff0c;永遠覺得沐浴春風。溫潤如玉&#xff0c;充滿魅力。 朋友細致而體貼。他記得你的生日時&#xff0c;并在那天給發送祝福和紅包&#xff1b;…