2009-06-29 70 views
0

我正在使用ajax工具包的ValidatorCalloutExtender在文本框中顯示錯誤消息。 ValidatorCalloutExtender正在驗證文本框的RegularExpressionValidator上進行擴展。我遇到的問題是,我需要動態更改ValidationExpression和ErrorMessage,具體取決於與文本框相關聯的選擇了哪些下拉列表項。我能夠成功地使用客戶端事件和JavaScript做到這一點,但是我似乎無法讓ValidatorCalloutExtender更新正確顯示的ErrorMessage。讓我更加困惑的事情是在Firefox中這樣做很好,但我似乎無法讓它在任何版本的IE中都能正常工作。如果任何人都可以幫助我找到一種方法來顯示我的錯誤消息,以動態更改它將不勝感激。動態更改ajax工具包ValidatorCalloutExtender

回答

3

好大家,

我想通了,我自己的問題,我想我可能把我的發現在這裏如果其他人試圖做類似我的東西。

在javascript中,我將regularexpressionvalidator的對象綁定到一個文本框,放入一個函數中,該函數將根據下拉列表中的值更改正則表達式和錯誤消息。如果用戶更改了下拉列表值,我希望validator和ajax validatorcallout立即更新,並告訴用戶文本框中的值現在是有效的或者它是無效的,但是由於這個新原因。我並不是說這是做這件事的最好方式,但這是對我有用的方式,我希望在客戶端做到這一點。

下面

是我使用和(VAL)是在通過的RegularExpressionValidator對象的代碼。

function setSearchRegEx(val) 
{ 
    var regExpression = ""; 
    var valMessage = "Must be in the following format: "; 
    var message = ""; 

    // set regex information depending on what drop down value they select. 
    switch (document.getElementByID('ddlValue1.ClientID').value) { 
     case "Value1": 
      regExpression = "^[a-zA-Z0-9'*\s-]{1,75}$"; 
      message = valMessage + "[A-Z][0-9]'. #-"; 
      break; 
     case "Value2": 
      regExpression = "^\[0-9]{3}-\[0-9]{2}-\[0-9]{4}|\d{9}$"; 
      message = valMessage + "999-99-9999"; 
      break; 
     case "Value3": 
      regExpression = "[a-zA-Z0-9'*\s-]{1,50}$"; 
      message = valMessage + "[A-Z][0-9]'. #-"; 
      break; 
     case "Valu4": 
      regExpression = "^\[0-9]{3}-\[0-9]{3}-\[0-9]{4}$"; 
      message = valMessage + "999-999-9999"; 
      break; 
     case "Value5": 
      regExpression = "^[0-9]{1,10}$"; 
      message = valMessage + "9999999999"; 
      break; 
     default: 
      regExpression = ""; 
      message = ""; 
    } 
    // set validation control values for the new drop down selected. 
    val.validationexpression = regExpression; 
    val.errormessage = message; 
    val.title = message; 

    // fire the validation function to validate what is currently in the textbox 
    val.isvalid = val.evaluationfunction(val); 
    //call the function to manipulate the UI 
    validatorUpdateDisplay(val); 
} 

function validatorUpdateDisplay(val) 
{ 
    if (val.isvalid) { 

     //make the error invisible 
     val.display = "none"; 
    } 
    else { 

     var browser = navigator.appName; 

     //different browsers get updated differently, IE really the only main one to update differently. 
     if (browser == "Microsoft Internet Explorer") { 
      val.ValidatorCalloutBehavior._errorMessageCell.innerText = val.errormessage; 
     } 
     else { 
      val.ValidatorCalloutBehavior._errorMessageCell.textContent = val.errormessage; 
     } 

     //make the error visible 
     val.display = "inline"; 
    }   
} 

正如你所看到的Internet Explorer不工作方式相同的休息我測試過的瀏覽器做到了!如果有人有更好的做法,請分享,我希望這個答案能幫助一些人!

謝謝