2009-11-10 81 views
2

我有2個TextBoxes(textBoxA,textBoxB),都由他們自己的RequiredFieldValidator監視。當textBoxA有一個值(或符合某些特定條件)時,我想'爲'textBoxB'啓用'RequiredFieldValidator。有條件驗證ASP.NET

使用案例:

案例1 textBoxA = 「」; - >顯示必填字段驗證消息 textBoxB =「」; - >不顯示驗證消息

案例2 textBoxA =「has a value」; textBoxB =「」; - >顯示必填字段驗證消息

案例3 textBoxA =「has a value」; textBoxB =「也有值」;

感謝您的幫助!

回答

4

在這種情況下,我會使用CustomValidator代替textBoxB而不是必需的字段驗證程序。在服務器端驗證方法中,您可以使用類似的東西控制驗證的確切性質。

if (textBoxA.Text != string.Empty) 
{ 
    args.IsValid = textBoxB.Text != string.Empty; 
} 
+0

感謝您的答覆,這將適用於服務器端驗證,但我會在同一頁上有一些依賴驗證,我不希望這麼多回傳 – tivo 2009-11-10 23:05:16

0

我不相信有一個聲明的方式來做到這一點。我總是通過一個ValidatePage方法來完成這個工作,我將驗證器設置爲啓用或禁用,然後在最後調用Page.Validate(然後繼續或基於Page.IsValid進行渲染)。

所以,要麼

validator2.IsEnabled = textBoxA.Text.Trim().Length > 0 

或類似的東西。

這是僞代碼btw ...我現在還沒有在一段時間內完成ASP.NET。

6

你可能想用CustomValidator來做到這一點。您需要實現客戶端和服務器端驗證。喜歡的東西(從我的頭頂和未經測試)

服務器端

protected void ServerValidation (object source, ServerValidateEventArgs args) 
{  
    if (!string.IsNullOrEmpty(textBoxA)) 
     args.IsValid = !string.IsNullOrEmpty(textBoxB); 

} 

客戶端

function clientValidation(sender, args) { 
    if (args.value !== "") { 
     var textBoxB= document.getElementById('textBoxB'); 
     args.IsValid = (textBoxB.value !== ""); 
    } 
    return; 
} 
0

我要做的就是根據需要更改驗證組,對例如,您可以將驗證組分配給textBoxB,使其與textBoxA.ValidationGroup &提交控件的值不同或相同,這可以在textBoxB的Onchange中完成。

評估的驗證器都對應於提交控件的相同驗證組。