Установка выражения RegularExpressionValidator в JavaScript - PullRequest
0 голосов
/ 13 февраля 2009

Можно ли установить 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. Да, я мог бы использовать обратную передачу, чтобы добиться этого, но это кажется ненужным.

(Предложения по альтернативному подходу также приветствуются!)

1 Ответ

1 голос
/ 13 февраля 2009
function setRegExValidator(ddlCardTypeID, regExValidatorID, regExes)
{
    var regEx = regExes[$get(ddlCardTypeID).selectedIndex];

    var val = $get(regExValidatorID);

    val['validationexpression'] = regEx;
}

Примечание: вам необходимо убедиться, что номер карты проверен и на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...