2009-06-29 8 views
0

Ich verwende den ValidatorCalloutExtender des Ajax-Toolkits, um Fehlermeldungen in einer Textbox anzuzeigen. Der ValidatorCalloutExtender erweitert sich auf einen RegularExpressionValidator, der das Textfeld überprüft. Das Problem, das ich habe, ist, dass ich die ValidationExpression und ErrorMessage dynamisch ändern muss, abhängig davon, welches Dropdown-Listenelement ausgewählt wurde, das dem Textfeld zugeordnet ist. Ich konnte dies erfolgreich mit clientseitigen Ereignissen und Javascript machen, aber dann kann ich nicht den ValidatorCalloutExtender dazu bekommen, die korrekt angezeigte ErrorMessage zu aktualisieren. Die Sache, die mich mehr verwirrt, ist, dass das in Firefox gut funktioniert, aber ich kann nicht scheinen, dass es in irgendeiner Version von IE funktioniert. Wenn jemand mir helfen kann, einen Weg zu finden, meine Fehlermeldung, die angezeigt wird, dynamisch zu ändern, würde es sehr geschätzt werden.Ajax-Toolkit dynamisch ändern ValidatorCalloutExtender

Antwort

3

Ok jeder,

dachte ich mein eigenes Problem und dachte, ich könnte meine Erkenntnisse stellen hier aus, wenn andere versuchen, etwas Ähnliches wie mir zu tun.

In Javascript übergebe ich das Objekt des regularyexpressionvalidator gebunden an ein Textfeld, in eine Funktion, die den regulären Ausdruck und die Fehlermeldung abhängig von einem Wert in einer Dropdown-Liste ändern. Wenn ein Benutzer den Wert der Dropdown-Liste änderte, sollte der Validator und der Ajax-Validatorcallout sofort aktualisiert werden und dem Benutzer entweder mitteilen, dass der Wert in der Textbox jetzt gültig oder ungültig war, aber aus diesem neuen Grund. Ich sage nicht, das ist der beste Weg, dies zu tun, aber das ist die Art und Weise, die für mich funktioniert und ich wollte es auf dem Client tun.

unten ist der Code, den ich verwende und (val) ist das RegularExpressionValidator Objekt, das in übergeben wird.

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"; 
    }   
} 

Wie Sie Internet Explorer wie der Rest auf die gleiche Weise funktionierten nicht sehen kann die Browser gegen die ich getestet habe! Wenn jemand eine bessere Möglichkeit hat, dies zu tun, bitte teilen, und ich hoffe, diese Antwort hilft einigen Menschen aus!

Dank