是否可以使用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!
}
。是的,我可以使用回发来实现这一目标,但这似乎没必要。
(也欢迎有关替代方法的建议!)
答案 0 :(得分:1)
function setRegExValidator(ddlCardTypeID, regExValidatorID, regExes)
{
var regEx = regExes[$get(ddlCardTypeID).selectedIndex];
var val = $get(regExValidatorID);
val['validationexpression'] = regEx;
}
注意:您需要确保在服务器端正确验证卡号。