Проверка Jquery не останавливает выполнение кода «код позади» кнопки asp.net - PullRequest
0 голосов
/ 23 апреля 2010

У меня есть кнопка asp.net, в которой есть событие click, которое в основном добавляет данные в базу данных. У меня также есть список радиокнопок (например, Утвердить / Отклонить) и текстовое поле. Если пользователь выбирает отклонение, текстовое поле становится видимым. Я хочу запустить проверку, что, когда пользователь нажимает кнопку «Отправить», если выбрано отклонение, текстовое поле не может быть пустым. Я использовал для этого проверку jquery. когда я нажимаю кнопку, рядом с текстовым полем появляется сообщение о том, что поле является обязательным, но оно не останавливает выполнение кода позади. Т.е. он добавляет данные в базу данных. Вот мой код.

<script type="text/javascript" language="javascript">



    $(function() {
        $('#declinediv').hide();
        ////////
        var $radBtn = $("table.rblist input:radio");
        $radBtn.click(function() {
            var $radChecked = $(':radio:checked');
            var value = $radChecked.val();
            if (value == 'Decline' || value == 'Approve') {
                if (value == 'Decline')
                    $('#declinediv').show();

                else
                    $('#declinediv').hide();
            }
            else {
                $('#declinediv').hide();
            }

        });
        //////////////////////////

        $("#aspnetForm").validate({
            rules: {
                <%=txtdeclinereason.UniqueID %>: {
                    minlength: 2,
                    required: true
                }
        }, messages: {
            <%=txtdeclinereason.UniqueID %>:{ 
                    required: "* Required Field *", 
                    minlength: "* Please enter atleast 2 characters *" 
                }
        }, onsubmit: true


    });

    //////////////////////////////////

    $('#btnsubmit').click(function(evt){
        var isValid = $("#aspnetForm").valid();

        if (!isValid)
        {
            evt.preventDefault();
            }
    });





});

    function myredirect(v, m, f) {
        window.location.href = v;
    }  

</script>


<table style="border: 1px black solid; text-align: center; vertical-align: middle"
    width="100%">
    <tr>
        <td>
            <asp:RadioButtonList ID="rbtnlstapprover" runat="server" RepeatDirection="Horizontal"
                CssClass="rblist" DataTextField="username" DataValueField="emailaddress">
                <asp:ListItem Text="Approve" Value="Approve" />
                <asp:ListItem Text="Decline" Value="Decline" />
            </asp:RadioButtonList>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="rbtnlstapprover"
                Text="*" ErrorMessage="Please select atleast one Approver" ValidationGroup="approvalgroup"
                Display="Dynamic" />
        </td>
    </tr>
    <tr>
        <td>
            <div id="declinediv">
                <asp:TextBox ID="txtdeclinereason" runat="server" TextMode="MultiLine" Columns="80"
                    Rows="5" />
             </div>
        </td>
    </tr>
    <tr>
        <td>
            <asp:Button ID="btnsubmit" runat="server" Text="Submit" CssClass="RegularButton"
                CausesValidation="true" ValidationGroup="approvalgroup" OnClick="btnsubmit_Click" />
        </td>
    </tr>
</table>

Как мне остановить выполнение кода позади? Спасибо за вашу помощь.

Edit:

Мне удалось исправить проблему, добавив событие OnClientClick для кнопки

if ($('#declinediv').is(':visible'))
{

     var isValid = $("#aspnetForm").valid();
     alert(isValid);

    if (isValid)
        return true;
    else
        return false;

}
else
{
    return true;
}

Ответы [ 4 ]

3 голосов
/ 23 апреля 2010

Установите свойство кнопки OnClientClick для вашей функции javascript для проверки. Если он не проверяется, сделайте так, чтобы ваша функция javascript вернула false, и страница не будет отправлять обратно.

<asp:Button ID="btnsubmit" runat="server" Text="Submit" CssClass="RegularButton"
                CausesValidation="true" ValidationGroup="approvalgroup" OnClick="btnsubmit_Click" OnClientClick="return(jsValidate());" />
1 голос
/ 30 апреля 2014

OnClick не выполнит код, пока OnClientClick не вернет true ...

, если проверка ложна, OnClientClick = "(return(validationfunction());" вернет false и обратная передача остановится.

0 голосов
/ 23 апреля 2010

Функция, обрабатывающая кнопку отправки, должна возвращать значение true, если проверка пройдена, и false, если проверка не пройдена.
Я не уверен, что код там присоединяет другой обработчик событий или заменяет его.Если обработчик событий только присоединен, и оба события запускаются с помощью jquery magic, простой возврат false может не сработать.

Также вы говорите, что записи все еще добавляются в базу данных.Это означает, что у вас нет проверки на стороне сервера для резервного копирования проверки на стороне клиента.Любые валидаторы JQuery могут быть обойдены, поэтому вы должны проверить еще раз на сервере.

0 голосов
/ 23 апреля 2010

Вы уверены, что это валидатор? Поместите «debbuger» в оператор if. Я думаю, вам нужно использовать ClientId, а не UniuqueId.

...