J'essaie de valider qu'un certain incrément d'un produit a été entré dans la zone de texte qté du produit qui se trouve dans un répéteur. Le problème est que l'incrément est différent pour chaque produit, donc j'ai besoin de cela comme variable pour chaque appel pour le valider (ce que je ne pense pas que vous pouvez faire avec un validateur personnalisé), et j'ai besoin de côté client avec un ValidatorCalloutExtender . La meilleure solution que j'ai trouvée est de déclencher un validateur RegEx qui évaluera faux via mon propre javascript (un autre validateur prend soin de s'assurer que c'est un nombre valide). Le problème est qu'avec ValidatorCalloutExtender, quand je désactive le validateur, il le marque toujours comme invalide (la zone de texte clignote en blanc puis redevient jaune (ce qui signifie invalide), même si j'ai placé des alertes JavaScript et je sais que le validateur est désactivé. ont des idées à ce qui se passe ici est ici le code MerciDésactiver le validateur mais la légende du validateur s'affiche toujours et provoque la validation
PS:.! tout fonctionne bien avec/la validatorCalloutExtender, mais je vraiment besoin
Callout Extenderles valideurs:
<asp:RegularExpressionValidator ID="ProductIncrementValidator" runat="server"
ControlToValidate="ProductQtyTxt"
ErrorMessage="Please enter a valid increment"
ValidationExpression="^triggerthisvalidation$"
Enabled="false"
Display="Dynamic"
SetFocusOnError="true"
ValidationGroup="productValidation">
</asp:RegularExpressionValidator>
<ajax:ValidatorCalloutExtender ID="ProductIncrementVE" runat="server"
TargetControlID="ProductIncrementValidator"
HighlightCssClass="validator"
WarningIconImageUrl="~/img/blank.gif">
</ajax:ValidatorCalloutExtender>
Lors de la liaison de données du produit:
Dim productQtyTxt As TextBox
productQtyTxt = CType(e.Item.FindControl("ProductQtyTxt"), TextBox)
Dim incrementValidator As RegularExpressionValidator
incrementValidator = CType(e.Item.FindControl("ProductIncrementValidator"), RegularExpressionValidator)
incrementValidator.ErrorMessage = "Please enter an increment of " & product.OrderIncrement.ToString()
' Add item qty increment check
productQtyTxt.Attributes.Add("onChange", "javascript:checkIncrement('" _
& productQtyTxt.ClientID & "', " _
& product.OrderIncrement & ", '" _
& incrementValidator.ClientID & "')")
Le Javascript:
function checkIncrement(textboxID, incrementQty, validatorID) {
var textbox = $get(textboxID);
var incrementValidator = $get(validatorID);
var qtyEntered = textbox.value;
if ((qtyEntered % incrementQty) != 0) {
ValidatorEnable(incrementValidator, true);
alert("not valid");
return;
}
else {
ValidatorEnable(incrementValidator, false);
alert("valid");
return;
}
}
J'ai mis la cssclass de la zone de texte à vide dans la fonction javascript et caché la légende, maintenant cela fonctionne mais quand focus est placé sur la boîte elle appelle la validation et essaye de valider avec mon expression^triggerthisvalidation $ pour le validateur RegEx. Comment puis-je le faire ne pas déclencher la validation sur le focus? – Ryan