1

有沒有從被評估停止驗證的方法如果先前驗證被發現是無效的 - 在控制水平?ASP.NET驗證 - 停止對驗證第一次失敗

例如,如果我創建一個文本框與RequiredFieldValidator,一個RegularExpressionValidator和自定義驗證,我不想,如果RequiredFieldValidatorRegularExpressionValidator已經確定輸入是無效的評估自定義驗證。

具體而言,在這種情況下,自定義驗證程序沒有客戶端支持,但是如果沒有輸入數據(使用RequiredFieldValidator)而不是回發發生,我想阻止回發。

+0

您是使用webforms還是mvc?另外,你是否有一些客戶端驗證的庫,比如jQuery Validate或VS附帶的MS庫? –

+0

我使用的是標準的RequiredFieldValidator等從ASP.NET –

+0

的RequiredFieldValidator的將默認啓用客戶端,因此,如果文本框爲空,也不會有一個回發。 –

回答

3

兩個RegularExpressionValidatorRequiredFieldValidator返回true,如果文本框爲空。換句話說:默認情況下,它們不會驗證您的空文本框是否爲空,因此您正在做正確的事情,它應該按照預期的方式工作。

的的RequiredFieldValidator和的RegularExpressionValidator在默認情況下也驗證客戶端 - 使用JavaScript - 所以,如果將其中一方的失敗不會出現回發。

請務必測試您的正則表達式字符串兩個客戶端和服務器端,因爲JavaScript和.NET regex'es不是100%兼容。

這是一個很好的做法,在所有控件定義ValidationGroup,包括應該觸發驗證的按鈕。這將使服務器端驗證,但我不是100%肯定,因此,如果您的CustomValidator不triggeren添加以下代碼爲您myButton_Click方法的第一行:

myButton_Click(object Sender, EventArgs e) 
{ 
    Page.Validate("MyValidationGroup"); 
    if (!Page.IsValid) 
    { 
     return; 
    } 

    // ... 
} 

Page.Validate()接受的ValidationGroup作爲參數。

+0

你是對的;開箱即用的功能正是我想要的,不幸的是按鈕被用來導致回發被無意標記爲CausesValidation =「False」,我沒有注意到。這就是回傳發生的原因,因爲驗證者實際上並未被客戶端評估! –