2009-02-13 8 views
0

Est-il possible de définir le ValidationExpression d'un RegularExpressionValidator en utilisant JavaScript? J'utilise ASP.NET 3.5.Définition de RegularExpressionValidator ValidationExpression dans JavaScript

Voici pourquoi je veux faire ...

Sur une page de paiement J'ai un DropDownList qui permet à mon utilisateur de choisir leur type de carte. En dessous, il y a un TextBox dans lequel ils tapent leur numéro de carte.

Je souhaite utiliser un RegularExpressionValidator pour valider que leur numéro de carte est valide pour leur type de carte. Le traitement du paiement par carte est effectué manuellement dans un système différent, donc je ne peux pas compter sur cela pour attraper les détails de la carte incorrecte.

Par conséquent, je dois utiliser un ValidationExpression différent pour chaque type de carte. Je voudrais définir le ValidationExpression en utilisant JavaScript, déclenchant l'événement DropDownList onchange.

Mon DropDownList est lié à un document XML:

<asp:DropDownList ID="ddlCardType" runat="server" 
    DataTextField="Text" DataValueField="Value" 
    DataSourceID="xdsCardTypes" AppendDataBoundItems="True"> 
    <asp:ListItem Text="(select)" Value=""></asp:ListItem> 
</asp:DropDownList> 
<asp:XmlDataSource ID="xdsCardTypes" runat="server" 
    DataFile="~/App_Data/PaymentCards.xml"> 
</asp:XmlDataSource> 

Voici le doc XML:

<?xml version="1.0" encoding="utf-8" ?> 
<PaymentCards> 
    <PaymentCard Text="American Express" Value="AmericanExpress" RegEx="3[47](\d{13})" /> 
    <PaymentCard Text="MasterCard" Value="MasterCard" RegEx="5[1-5](\d{14})" /> 
    <PaymentCard Text="Maestro" Value="Maestro" RegEx="(5018|5020|5038|6304|6759|6761)\d{8,15}" /> 
    <PaymentCard Text="Visa" Value="Visa" RegEx="4(\d{15}|\d{12})" /> 
</PaymentCards> 

Dans le code-behind je crée un appel de fonction JavaScript et l'ajouter à la onchange événement de la DropDownList:

Et dans un fichier .js référencé I ont les suivantes:

function setRegExValidator(ddlCardTypeID, regExValidatorID, regExes) 
{ 
    var regEx = regExes[$get(ddlCardTypeID).selectedIndex]; 

    var val = $get(regExValidatorID); 

    // TODO: Set the ValidationExpression! 
} 

Donc mon seul chaînon manquant est la possibilité de définir la ValidationExpression de JavaScript. Oui, je pourrais utiliser une publication pour y parvenir, mais cela semble inutile.

(suggestions sur une autre approche sont également les bienvenus!)

Répondre

1
function setRegExValidator(ddlCardTypeID, regExValidatorID, regExes) 
{ 
    var regEx = regExes[$get(ddlCardTypeID).selectedIndex]; 

    var val = $get(regExValidatorID); 

    val['validationexpression'] = regEx; 
} 

NB: Vous devez vous assurer que le numéro de carte est validée correctement sur le côté serveur aussi.

+0

Merci Luke, mais cela ne semble pas fonctionner. L'expression de validation du validateur semble être mise à jour, mais la validation échoue toujours. –

+0

@Richard, je viens de tester ce (bien, quelque chose de très similaire) dans IE, Firefox et Chrome et cela fonctionne comme prévu. Est-ce que les expressions régulières fonctionnent correctement si vous les essayez individuellement dans un RegularExpressionValidator standard sans aucun des éléments JavaScript dynamiques? – LukeH

+0

Un grand merci pour votre rigueur Luke! Mes RegExes fonctionnent bien si je les mets directement dans le fichier aspx, je ne suis pas sûr de ce qui se passe. Après réflexion, j'ai décidé de le faire en C# dans un CustomValidator, car j'en utilisais un pour d'autres validations. –