1. ASP.NET 服務(wù)器控件的客戶端驗(yàn)證 如果用戶使用的瀏覽器支持動(dòng)態(tài) HTML (DHTML),則 ASP.NET 驗(yàn)證控件可以使用客戶端腳本來執(zhí)行驗(yàn)證。因?yàn)檫@種控件可以提供及時(shí)反饋(無需到服務(wù)器的往返過程),所以用戶會(huì)感覺到頁的性能有所改善。 在大多數(shù)情況下,無需對頁或驗(yàn)證控件作出任何更改便可使用客戶端驗(yàn)證??丶⒆詣?dòng)檢測瀏覽器是否支持 DHTML 并執(zhí)行相應(yīng)的檢查??蛻舳蓑?yàn)證使用的錯(cuò)誤顯示機(jī)制和服務(wù)器端驗(yàn)證相同。
2. 禁用 ASP.NET 服務(wù)器控件驗(yàn)證 在特定條件下,您可能需要避開驗(yàn)證。例如,您可能具有一個(gè)頁面,即使用戶沒有正確填寫所有驗(yàn)證字段,也應(yīng)該可以發(fā)送頁。您可以設(shè)置 ASP.NET 服務(wù)器控件來避開客戶端和服務(wù)器的驗(yàn)證,而不只是客戶端驗(yàn)證。
安全注意 默認(rèn)情況下,ASP.NET 網(wǎng)頁執(zhí)行請求驗(yàn)證以確保用戶輸入內(nèi)容不包含腳本或 HTML 元素??梢燥@式禁用該功能。有關(guān)更多信息,請參見腳本侵入。 您還可以禁用驗(yàn)證控件,以使它根本不在頁面上呈現(xiàn)并且不進(jìn)行使用該控件的驗(yàn)證。 如果要執(zhí)行服務(wù)器上的驗(yàn)證,不執(zhí)行客戶機(jī)上的驗(yàn)證,您可以將單獨(dú)驗(yàn)證控件設(shè)置為不生成客戶端腳本。如果客戶端上的動(dòng)態(tài)更新導(dǎo)致頁的布局出現(xiàn)問題,或者如果要在驗(yàn)證之前執(zhí)行一些服務(wù)器代碼,這一措施將尤為有用。 在特定控件中禁用驗(yàn)證
3. 以編程方式測試 ASP.NET 服務(wù)器控件的有效性 驗(yàn)證控件測試用戶輸入,設(shè)置錯(cuò)誤狀態(tài),并生成錯(cuò)誤信息。它們不會(huì)更改頁的處理流程,例如,在檢測到用戶輸入錯(cuò)誤時(shí)不會(huì)略過代碼。取而代之的是,您將在執(zhí)行應(yīng)用程序的特定邏輯之前在代碼中測試控件的狀態(tài)。如果檢測到錯(cuò)誤,您自己的代碼將無法運(yùn)行;頁將繼續(xù)處理并返回給用戶,并向其顯示錯(cuò)誤信息。
安全注意 默認(rèn)情況下,ASP.NET 網(wǎng)頁自動(dòng)驗(yàn)證是否有惡意用戶試圖向您的應(yīng)用程序發(fā)送腳本或 HTML 元素。有關(guān)更多信息,請參見腳本侵入概述。 您可以測試常規(guī)的頁范圍的狀態(tài),并且可以測試單獨(dú)控件的狀態(tài)。通常,您在為頁創(chuàng)建的事件處理程序中完成上述工作。 測試常規(guī)錯(cuò)誤狀態(tài)
復(fù)制代碼If (Me.IsPostBack) Then Me.Validate() If (Not Me.IsValid) Then Dim msg As String ' Loop through all validation controls to see which ' generated the error(s). Dim oValidator As IValidator For Each oValidator In Validators If oValidator.IsValid = False Then msg = msg & " " & oValidator.ErrorMessage End If Next Label1.Text = msg End IfEnd If C#
復(fù)制代碼if (this.IsPostBack){ this.Validate(); if (!this.IsValid) { string msg = ""; // Loop through all validation controls to see which // generated the errors. foreach (IValidator aValidator in this.Validators) { if (!aValidator.IsValid) { msg += " " + aValidator.ErrorMessage; } } Label1.Text = msg; }}