запускает как onclientclick, так и валидацию на стороне клиента из управления валидацией при нажатии кнопки Client - PullRequest
2 голосов
/ 01 августа 2011

У меня есть несколько элементов управления ASP Text Box на странице, к которой добавляются пользовательские валидаторы. У меня есть кнопка Сохранить, которая проверяет эти текстовые поля. Я только что добавил группу проверки так же, как и в текстовых полях.

Чтобы включить дополнительное требование, я добавил функцию onClientClick для кнопки «Сохранить». Но удивлен тем, что проверка из-за группы проверки (элементы управления валидатора) не запускается, вместо этого вызывается функция onClientClick и вызывается событие Click на стороне сервера.

код Javascript

function ValidateInputs(source, args) {
            var regex = /^(-{0,1}\d{1,100})$/;
            if (args.Value.length < 1) {
                $("span[id$='spn_error']").html('Please Enter ' + $(source).attr("errormessage"));
                $("span[id$='spn_error']").show();
                args.IsValid = false;
                return;
            }
            else if (!regex.test(args.Value)) {
                $("span[id$='spn_error']").html($(source).attr("errormessage") + ' allows only numbers');
                $("span[id$='spn_error']").show();
                args.IsValid = false;
                return;
            }
            else {
                if ($("span[id$='spn_error']").html().indexOf($(source).attr("errormessage")) >= 0)
                    $("span[id$='spn_error']").hide();
                args.IsValid = true;
                return;
            }
        }

function isValidTracker() {
//Dummy Code Say Confirm button
return(confirm('Are you sure');)

}

HTML-код

<span class="errormesg" runat="server" id="spn_error" style="display: none;
                        font-size: 9px;"></span>
<asp:TextBox ID="txtLastMonthCount" runat="server" CssClass="inputbox" Width="75px" autocomplete="off" onkeypress="return isNumberKey(event);" ValidationGroup="g1"></asp:TextBox>

<asp:CustomValidator ID="CVLastMonthCount" runat="server" ErrorMessage="Last Months Closing Count" Text="<img src='../images/alert.gif' alt='Please Enter Last Months Closing Count' title='Please Enter Last Months Closing Count' />" 
    ValidationGroup="g1" ClientValidationFunction="ValidateInputs" OnServerValidate="ValidateInputs" ControlToValidate="txtLastMonthCount" ValidateEmptyText="true"></asp:CustomValidator>

<asp:Button ID="btnSave" runat="server" Text="Save" CssClass="button" ValidationGroup="g1" OnClientClick="return isValidTracker();" OnClick="btnSave_Click" />

Пожалуйста, помогите мне найти решение для запуска onclientclick и контроль проверки нажатия кнопки Save.

Ответы [ 4 ]

7 голосов
/ 01 августа 2011

Изменить OnClientClick с return isValidTracker() на if (!isValidTracker()) return false;

2 голосов
/ 01 августа 2011

Спасибо за предоставленные решения. Я тоже нашел решение, пока гуглял, подумал поделиться им, так как это было бы полезно в других сценариях для таких, как я.

function isValidTracker() {

    if (Page_IsValid) {
        return(confirm('Are you sure');)//Dummy Code Say Confirm button
    }
    else
    {
        return false;
    }

    }

Где Page_IsValid - переменная сценария Java, установленная элементом управления проверки ASP.Net. Он устанавливается в значение true, когда все элементы управления проверкой успешно прошли проверку. Спасибо:)

1 голос
/ 01 августа 2011

Решение OneHalf работает, но я бы испекла последнюю проверку в вашем валидаторе - это гарантирует, что вы не спросите пользователя "вы уверены?" пока вы не узнаете, что их действие действительно ...

    function ValidateInputs(source, args) {
    var regex = /^(-{0,1}\d{1,100})$/;
    if (args.Value.length < 1) {                 
        $("span[id$='spn_error']").html('Please Enter ' + $(source).attr("errormessage"));
        $("span[id$='spn_error']").show();                 
        args.IsValid = false;                 
    }             
    else if (!regex.test(args.Value)) {                 
        $("span[id$='spn_error']").html($(source).attr("errormessage") + ' allows only numbers');                
        $("span[id$='spn_error']").show();                 
        args.IsValid = false;                
    } else {                 
        if ($("span[id$='spn_error']").html().indexOf($(source).attr("errormessage")) >= 0)                     
            $("span[id$='spn_error']").hide();                 
        args.IsValid = true;
    }

    if (args.IsValid) args.IsValid = isValidTracker();
}  

Хотя я бы согласился, что со стороны команды ASP.NET был упущен - ваша реализация кажется более интуитивной и должна быть поддержана.

B

0 голосов
/ 31 марта 2017

Здравствуйте, у меня тоже такая же проблема.Свойство CausesValidation = "true" решило мою проблему.

...