ASP.NET 中有一系列驗證控制項,可方便驗證用戶輸入資料是否合法。雖這些驗證控制項強大且易用,但有個缺點:一般使用時,提交網頁會對整個網頁用戶輸入進行驗證。驗證控制項中無直接方法只驗證頁面某些部分輸入。本文介紹如何利用 ASP.NET 驗證控制項與 JavaScript 特性,完成只驗證頁面某些部分輸入功能。
舉例,某些應用中,為用戶輸入方便,可能在同一頁面存在多個要求用戶輸入資料與提交資料表單(這在一些資訊系統後台管理系統中較常見)。而用戶每次操作,如用戶輸入每次進貨數量並提交,則只需驗證該提交資料,而頁面其他表單,如每次出貨數量,因用戶未填入資料,則不需校驗,這也提高應用效率。
下面看如何選擇性對表單輸入驗證,首先全面了解 ASP.NET 輸入驗證控制項一些屬性與用法。
首先介紹 CausesValidation 屬性。若不想對某按鈕提交事件驗證,只需將 CausesValidation 設為 false,如有一「取消」按鈕可這樣設:
<asp:button id="cmdCancel" runat="server" Text="Cancel" CausesValidation="False"></asp:button>
另一種寫法:
cmdcancel.causesvalidation=false;
這樣,一旦 CausesValidation 設為 false,無論客戶端驗證還是伺服端驗證都將不起作用。
若要選擇性驗證頁面某些部分,需使用驗證控制項某些方法與 JavaScript 實現,下列列表列舉驗證控制項一些方法與屬性:
| 名稱 | 描述 |
|---|---|
| Page_IsValid | 檢驗頁面所有輸入是否合法,返回布林值 |
| Page_Validators | 目前頁面所有驗證控制項形成陣列 |
| Page_ValidationActive | 布林值,表明是否執行驗證功能,設為 false 關閉驗證 |
| Isvalid | 驗證客戶端輸入是否合法 |
| ValidatorEnable(val, enable) | 將某驗證控制項作傳遞參數,啟動或禁用該控制項驗證功能,客戶端生效 |
特別介紹 ValidatorEnable 方法,可禁用某控制項驗證功能,如:
<script language="javascript">
ValidatorEnable(驗證控制項名稱, false)
</script>
若要禁用頁面所有驗證控制項,可配合 page_validators 陣列(元素為頁面所有驗證控制項),使用如下程式碼:
<script language="javascript">
for(i=0;i< Page_Validators.length;i++)
{
ValidatorEnable(Page_Validators[i], false)
}
</script>
實際使用時將上述程式碼搭配,即可實現選擇性驗證表單輸入,看個具體例子,如下圖:

上圖中,我們要實現:用戶只輸入 region name 值後點擊「get report」按鈕提交,伺服端只驗證 region name 輸入,用戶未輸入開始日期與結束日期則不校驗、不顯示錯誤;反之,用戶輸入開始與結束日期提交後,系統也不驗證 region name 輸入。
程式碼如下。
<script language="javascript">
function enableRegionValidators()
{
for(i=0;i< Page_Validators.length;i++)
{
ValidatorEnable(Page_Validators[i], false)
}
ValidatorEnable(rvRegion, true)
}
</script>