Диалоговое окно подтверждения jQuery не запускает событие OnClick кнопки ASP на стороне сервера после подтверждения пользователя

#jquery #dialog #confirm

#jquery #диалоговое окно #подтвердите

Вопрос:

Я хочу показать диалоговое окно модального подтверждения события нажатия кнопки ASP (btnRejectAll), и как только пользователь выбирает «OK» в модальном диалоговом окне, ему необходимо вызвать событие OnClick на стороне сервера кнопки «btnRejectAll». Следующий код показывает диалоговое окно модального подтверждения при нажатии, но как только мы нажимаем кнопку OK, событие на стороне сервера не запускается. Кто-нибудь может мне помочь с этим?

Вот мой код.

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

    $(function() {


        $("#dialogReject").dialog({
            autoOpen: false,
            height: 300,
            width: 350,
            modal: true,
            buttons: {
                "Reject": function() {
                    $(this).dialog("close");
                    return true;
                },
                Cancel: function() {
                    $(this).dialog("close");
                    return false;
                }
            }
        });

        $("#btnRejectAll").click(function(event) 
        {
            event.preventDefault();

            $("#dialogReject").dialog("open"); 
        });


    });

<asp:Button ID="btnRejectAll" runat="server" Text="Reject All" OnClick="btnRejectAll_OnClick" />
  

Комментарии:

1. Извините. как работает кнопка asp? отправляет ли оно форму для отправки данных на сервер? Если это так, возможно, попробуйте $ («#btnRejectAll»).parents(«форма»).submit(); непосредственно перед возвратом true.

Ответ №1:

Вы предотвращаете действие по умолчанию при нажатии на btnRejectAll , но вы никогда не вызываете никаких действий при действии «Отклонить». Я не знаком с ASP.NET но, судя по вашей разметке, похоже, что вы отменяете вызов btnRejectAll_OnClick . Если это функция JavaScript, то вы могли бы сделать это:

 "Reject": function() {
             $(this).dialog("close");
             btnRejectAll_OnClick();
             return true;
          },
  

Если это не так (и я подозреваю, что это не так), то, вероятно, это запуск отправки формы. Таким образом, вы могли бы вместо этого сделать это:

 "Reject": function() {
             $(this).dialog("close");
             $('#form').submit();
             return true;
          },
  

Ответ №2:

Я нашел способ запускать событие на стороне сервера кнопки при подтверждении диалога. Вот код.

 function ConfirmReject(detailId) {

        var leaveId = $("#hdnLeaveReqId").val();



        $("#dialogReject").dialog({
            autoOpen: true,
            height: 300,
            width: 350,
            modal: true,
            buttons: {
                "Reject": function() {
                    $.ajax({
                        type: "POST",
                        url: "LeaveRequestForm.aspx/RejectLeave",
                        data: "{'LeaveReqId':'"   leaveId   "', 'detailId':'"   detailId
                                  "', 'rejectReason':'"   $("#txtRejectReason").val()   "'}",
                        dataType: 'json',
                        contentType: "application/json; charset=utf-8",
                        success: function(msg) { location.reload(); }
                    });

                    $(this).dialog('close');
                },
                Cancel: function() {
                    $(this).dialog("close");
                }
            }
        });

        return false;
    }

 <asp:Button ID="btnRejectAll" runat="server" Text="Reject All" 
                        OnClientClick="return ConfirmReject(0);" />
  

В классе CodeBehind:

 <WebMethod()> _
Public Shared Function RejectLeave(ByVal LeaveReqId As Integer, ByVal detailId As Integer, ByVal rejectReason As String) As String

    'Do Something here

    Return "success"

End Function