简体   繁体   中英

Server click executes before user click on confirmation dialog

I work with ASP.NET

I have some button "Delete" which remove users.

<asp:LinkButton ID="lnkDeleteUser" runat="server" OnClientClick="return ValidateDeleteUser();" OnClick="lnkDeleteUser_Click" CssClass=" btn btn-primary" Text="Delete"></asp:LinkButton>

My ValidateDeleteUser-function looks like :

    function ValidateDeleteUser() {

    if ($("#hdnNewUserFlag").val() != "Update") {
        Dialogs.Alert("Please select user", null, null);
        return false;
    }

    function okCallBack() {
        return true;
    }

    function cancelCallBack() {
        return false;
    }

    if ($("#hdnNewUserFlag").val() == "Update") {
        Dialogs.Confirmation("Are you sure you want to Delete this User?", okCallBack, cancelCallBack, null);
    }
}

where Dialogs.Confirmation - is my custom confirm-dialog.

    var Dialogs = new function() {
    var todo = null;

    function getConfirmModalDialog(title, textBody) {
        // create layout of dialog
        return dialog;
    };

    function getConfirmationtDialog(title, msg, okCallBack, cancelCallBack, callBackObj) {
        var ConfirmationDialog = $('#confirm-dialog');
        if (ConfirmationDialog.length == 0) {
            ConfirmationDialog = getConfirmModalDialog(title, msg);
        } else {
            $('.modal-title', ConfirmationDialog).html(title);
            $('.modal-body', ConfirmationDialog).html(msg);
        }

        $('.ok-btn', ConfirmationDialog).unbind('click').click(function(e) {
            e.preventDefault();
            if (typeof okCallBack === "function") {
                todo = okCallBack(callBackObj);
            }
            ConfirmationDialog.modal('hide');
        });

        $('.cancel-btn', ConfirmationDialog).unbind('click').click(function(e) {
            e.preventDefault();
            if (typeof cancelCallBack === "function") {
                todo = cancelCallBack(callBackObj);
            }
            ConfirmationDialog.modal('hide');
        });

        return ConfirmationDialog;
    };

    this.Confirmation = function (dialogMsg, okCallBack, cancelCallBack, callBackObj) {
        var dlg = getConfirmationtDialog('Confirmation', dialogMsg, okCallBack, cancelCallBack, callBackObj);
        dlg.modal('show');
    };
}

My problem is next : when user clicks on "Delete" Button, confirmation dialog opens and after this server side click executes, before user clicks on confirm-Ok-button.

The problem is that you are not using a return false like this.

if ($("#hdnNewUserFlag").val() == "Update") {
    Dialogs.Confirmation("Are you sure you want to Delete this User?", okCallBack, cancelCallBack, null);
    return false;
}

On calling Dialogs.Confirmation , the modal gets opened and the buttons get click . But nowhere are you telling your function to wait for the click event. So after executing the JavaScript code, the server-side event will be executed.

Update: You should be returning false to the main function which calls Dialogs.Confirm . That is, ValidateDeleteUser as done above. Otherwise the main function will return true

我猜您想做的是使回发到服务器的Dialouge点上的确认按钮,而没有链接按钮进行回发到服务器。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM