Можно ли установить ValidationExpression
для RegularExpressionValidator
с помощью JavaScript? Я использую ASP.NET 3.5.
Вот почему я хочу сделать это ...
На странице оплаты у меня есть DropDownList
, которая позволяет моему пользователю выбирать тип своей карты. Ниже TextBox
, в котором они набирают номер своей карты.
Я хочу использовать RegularExpressionValidator
, чтобы подтвердить, что номер их карты действителен для данного типа карты. Обработка платежа по карте выполняется вручную в другой системе, поэтому я не могу рассчитывать на то, что она укажет неверные данные карты.
Поэтому мне нужно использовать разные ValidationExpression
для каждого типа карт. Я хотел бы установить ValidationExpression
с помощью JavaScript, запустив событие 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 и добавляю его в событие onchange DropDownList
:
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!
}
Итак, моя единственная недостающая ссылка - это возможность установить ValidationExpression
из JavaScript. Да, я мог бы использовать обратную передачу, чтобы добиться этого, но это кажется ненужным.
(Предложения по альтернативному подходу также приветствуются!)