J'utilise ValidatorCalloutExtender de l'outil ajax toolkit pour afficher les messages d'erreur sur une zone de texte. ValidatorCalloutExtender s'étend sur un RegularExpressionValidator qui valide la zone de texte. Le problème que je rencontre est que j'ai besoin de changer dynamiquement ValidationExpression et ErrorMessage en fonction de l'élément de liste déroulante qui a été sélectionné associé à la zone de texte. J'ai réussi à le faire en utilisant des événements côté client et javascript, mais je n'arrive pas à obtenir le ValidatorCalloutExtender pour mettre à jour le ErrorMessage qui est affiché correctement. La chose qui me dérange le plus est que cela fonctionne bien dans Firefox mais je n'arrive pas à le faire fonctionner dans n'importe quelle version d'IE. Si quelqu'un peut m'aider à trouver un moyen d'afficher dynamiquement mon message d'erreur, il serait grandement apprécié.Modifier dynamiquement ajax toolkit ValidatorCalloutExtender
Répondre
tout le monde Ok,
Je me suis mon propre problème et pensé que je pourrais mettre mes conclusions ici si d'autres essaient de faire quelque chose de semblable à moi.
En javascript, je passe l'objet du regularexpressionvalidator lié à une zone de texte, dans une fonction qui va changer l'expression régulière et le message d'erreur en fonction d'une valeur dans une liste déroulante. Si un utilisateur modifiait la valeur de la liste déroulante, je voulais que le validateur et ajax validatorcallout se mettent immédiatement à jour et disaient à l'utilisateur que la valeur dans la zone de texte était maintenant valide ou invalide, mais à cause de cette nouvelle raison. Je ne dis pas que c'est la meilleure façon de le faire mais c'est la façon dont cela fonctionne pour moi et je voulais le faire sur le client.
ci-dessous est le code que j'utilise et (val) est l'objet RegularExpressionValidator qui est passé dans.
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";
}
}
Comme vous pouvez le voir Internet Explorer ne fonctionne pas de la même manière que le reste de les navigateurs que j'ai testés ont fait! Si quelqu'un a une meilleure façon de le faire, s'il vous plaît partager, et j'espère que cette réponse aide certaines personnes!
Remerciements