Отключить Валидатор, но Вызов Валидатора все еще показывает и вызывает проверку - PullRequest
4 голосов
/ 26 июня 2009

Я пытаюсь проверить, что определенное приращение продукта было введено в текстовое поле количества продукта, которое находится в повторителе. Проблема в том, что приращение отличается для каждого продукта, поэтому мне нужно, чтобы в качестве переменной для каждого вызова его проверяли (что, я думаю, вы не можете сделать с помощью пользовательского валидатора), и мне нужна его сторона клиента с ValidatorCalloutExtender , Лучшее решение, которое я придумала, - это запустить валидатор RegEx, который будет оценивать false через мой собственный javascript (другой валидатор позаботится о том, чтобы убедиться, что это верный номер). Проблема в том, что с ValidatorCalloutExtender, когда я отключаю валидатор, он все равно помечает его как недействительный (текстовое поле мигает белым, затем снова становится желтым (что означает его недействительным), даже если я разместил предупреждения JavaScript и знаю, что валидатор отключается. есть идеи относительно того, что здесь происходит? Вот код. Спасибо!

PS: все отлично работает без validatorCalloutExtender, но мне действительно нужен Callout Extender!

Валидаторы:

<asp:RegularExpressionValidator ID="ProductIncrementValidator" runat="server"
  ControlToValidate="ProductQtyTxt"
  ErrorMessage="Please enter a valid increment"
  ValidationExpression="^triggerthisvalidation$"
  Enabled="false"
  Display="Dynamic"
  SetFocusOnError="true"
  ValidationGroup="productValidation">
</asp:RegularExpressionValidator>

<ajax:ValidatorCalloutExtender ID="ProductIncrementVE" runat="server"
  TargetControlID="ProductIncrementValidator"
  HighlightCssClass="validator"
  WarningIconImageUrl="~/img/blank.gif">
</ajax:ValidatorCalloutExtender>

При привязке данных к продукту:

Dim productQtyTxt As TextBox
productQtyTxt = CType(e.Item.FindControl("ProductQtyTxt"), TextBox)

Dim incrementValidator As RegularExpressionValidator
incrementValidator = CType(e.Item.FindControl("ProductIncrementValidator"), RegularExpressionValidator)
incrementValidator.ErrorMessage = "Please enter an increment of " & product.OrderIncrement.ToString()


' Add item qty increment check
productQtyTxt.Attributes.Add("onChange", "javascript:checkIncrement('" _
  & productQtyTxt.ClientID & "', " _
  & product.OrderIncrement & ", '" _
  & incrementValidator.ClientID & "')")

Javascript:

    function checkIncrement(textboxID, incrementQty, validatorID) {
    var textbox = $get(textboxID);
    var incrementValidator = $get(validatorID);
    var qtyEntered = textbox.value;

    if ((qtyEntered % incrementQty) != 0) {
        ValidatorEnable(incrementValidator, true);
        alert("not valid");
        return;
    }
    else {
        ValidatorEnable(incrementValidator, false);
        alert("valid");
        return;
    }
}

Ответы [ 2 ]

1 голос
/ 08 февраля 2010

1.Установите CSS-класс для ValidatorCalloutExtender:


<style id = "style1" type="text/css">
        .CustomValidator
        {
            position: relative;
            margin-left: -80px;
            margin-top: 8px;
            display: inherit;
        }
</style>


<ajax:ValidatorCalloutExtender ID="ProductIncrementVE" runat="server"
  TargetControlID="ProductIncrementValidator"
  HighlightCssClass="validator"
  WarningIconImageUrl="~/img/blank.gif" 
  CssClass="CustomValidator">
</ajax:ValidatorCalloutExtender>

2. Используйте JavaScript, чтобы изменить этот класс CSS, когда это необходимо. Установить отображение = нет:



function alterDisplay(type) {
    var styleSheet, cssRule;
    if (document.styleSheets) {
        styleSheet = document.styleSheets[index1];
        if (styleSheet) {
            if (styleSheet.cssRules)
                cssRule = styleSheet.cssRules[index2]; // Firefox
            else if (styleSheet.rules)
                cssRule = styleSheet.rules[index2];         // IE
            if (cssRule) {
                cssRule.style.display = type;
            }

        }
    }
}

Примечание: index1 и index2 могут отличаться от страниц, это зависит от вашего объявления. Вы можете использовать IE отладчик, чтобы найти наши правильные индексы.

0 голосов
/ 22 февраля 2011

У меня была такая же проблема, я решил что-то вроде этого

if ((qtyEntered % incrementQty) != 0) {
    ValidatorEnable(incrementValidator, true);
    $("#" + validatorID + "_ValidatorCalloutExtender_popupTable").show();
    alert("not valid");
    return;
}
else {
    ValidatorEnable(incrementValidator, false);
    $("#" + validatorID + "_ValidatorCalloutExtender_popupTable").hide();
    alert("valid");
    return;
}

Надеюсь, это кому-нибудь поможет.

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