【问题标题】:Setting RegularExpressionValidator ValidationExpression in JavaScript在 JavaScript 中设置 RegularExpressionValidator ValidationExpression
【发布时间】:2009-02-13 09:48:52
【问题描述】:

是否可以使用 JavaScript 设置 RegularExpressionValidatorValidationExpression?我正在使用 ASP.NET 3.5。

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

在支付页面上,我有一个DropDownList,它允许我的用户选择他们的卡类型。在其下方是TextBox,他们在其中输入他们的卡号。

我想使用RegularExpressionValidator 来验证他们的卡号对于他们给定的卡类型是否有效。卡支付处理是在不同的系统中手动执行的,所以我不能依靠它来捕获不正确的卡详细信息。

因此,我需要为每种卡类型使用不同的ValidationExpression。我想使用 JavaScript 设置 ValidationExpression,触发 DropDownList onchange 事件。

我的DropDownList 绑定到一个 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>

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

在代码隐藏中,我正在创建一个 JavaScript 函数调用并将其添加到 DropDownList 的 onchange 事件中:

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

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

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

    var val = $get(regExValidatorID);

    // TODO: Set the ValidationExpression!
}

所以我缺少的一个链接是能够从 JavaScript 设置ValidationExpression。是的,我可以使用回发来实现这一点,但这似乎没有必要。

(也欢迎提出替代方法的建议!)

【问题讨论】:

    标签: asp.net validation webforms


    【解决方案1】:
    function setRegExValidator(ddlCardTypeID, regExValidatorID, regExes)
    {
        var regEx = regExes[$get(ddlCardTypeID).selectedIndex];
    
        var val = $get(regExValidatorID);
    
        val['validationexpression'] = regEx;
    }
    

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

    【讨论】:

    • 谢谢卢克,但这似乎并没有真正起作用。验证器的validationexpression似乎更新了,但验证总是失败。
    • @Richard,我刚刚在 IE、Firefox 和 Chrome 中测试了这个(嗯,非常相似),它按预期工作。如果您在没有任何动态 JavaScript 内容的标准 RegularExpressionValidator 中单独尝试正则表达式,它们是否可以正常工作?
    • 非常感谢您的周到,卢克!如果我直接将它们设置在 aspx 文件中,我的 RegExes 工作正常,但不确定发生了什么。经过一番思考,我决定只在 C# 中的 CustomValidator 中执行此操作,因为无论如何我都在使用一个进行其他验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多