在JavaScript中设置RegularExpressionValidator ValidationExpression

时间:2009-02-13 09:48:52

标签: asp.net validation webforms

是否可以使用JavaScript设置ValidationExpression的{​​{1}}?我正在使用ASP.NET 3.5。

这就是我想要这样做的原因......

在付款页面上,我有一个RegularExpressionValidator,允许我的用户选择他们的卡片类型。在其下方是DropDownList,在其中键入了他们的卡号。

我想使用TextBox来验证他们的卡号对于他们给定的卡类型是否有效。卡支付处理在不同的系统中手动执行,因此我不能依赖此卡来捕获错误的卡详细信息。

因此,我需要为每种卡片类型使用不同的RegularExpressionValidator。我想使用JavaScript设置ValidationExpression,启动ValidationExpression onchange事件。

我的DropDownList绑定到XML文档:

DropDownList

这是XML doc:

<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>

在代码隐藏中,我正在创建一个JavaScript函数调用并将其添加到<?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> 的onchange事件中:

DropDownList

在引用的.js文件中,我有以下内容:

XDocument paymentCards = XDocument.Parse(xdsCardTypes.GetXmlDocument().InnerXml, LoadOptions.None);

List<string> regExes = paymentCards.Descendants("PaymentCard")
    .Select(pc => pc.GetAttribute("RegEx").Value).ToList();

string setRegExValidatorScript = string.Format("setRegExValidator('{0}', '{1}', {2});",
    ddlCardType.ClientID,
    txtCardNumber_RegularExpressionValidator.ClientID,
    regExes.ToJavaScriptArgumentList());

ddlCardType.AddAttribute("onchange", setRegExValidatorScript);

所以我的一个缺失的链接是能够从JavaScript设置function setRegExValidator(ddlCardTypeID, regExValidatorID, regExes) { var regEx = regExes[$get(ddlCardTypeID).selectedIndex]; var val = $get(regExValidatorID); // TODO: Set the ValidationExpression! } 。是的,我可以使用回发来实现这一目标,但这似乎没必要。

(也欢迎有关替代方法的建议!)

1 个答案:

答案 0 :(得分:1)

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

    var val = $get(regExValidatorID);

    val['validationexpression'] = regEx;
}

注意:您需要确保在服务器端正确验证卡号。