Confirmer le bouton postback OnClientClick ASP.NET

<asp:Button runat="server" ID="btnUserDelete" Text="Delete" CssClass="GreenLightButton"
                           OnClick="BtnUserDelete_Click"
                           OnClientClick="return UserDeleteConfirmation();" 
 meta:resourcekey="BtnUserDeleteResource1" />

j'ai essayé:

function UserDeleteConfirmation() {
        if (confirm("Are you sure you want to delete this user?"))
            return true;
        else
            return false;
}

et

function UserDeleteConfirmation() {
    if (confirm("Are you sure you want to delete this user?")) {
            __doPostBack(btnUserDelete, '');
    }

    return false;
 }

et aucun d'eux ne fonctionne.

42
demandé sur Dan Short 2012-12-27 20:47:29

10 réponses

essaye ceci:

<asp:Button runat="server" ID="btnUserDelete" Text="Delete" CssClass="GreenLightButton"
                       OnClick="BtnUserDelete_Click"
                       OnClientClick="if ( ! UserDeleteConfirmation()) return false;" 
 meta:resourcekey="BtnUserDeleteResource1" />

de Cette façon, le "retour" n'est exécuté lorsque l'utilisateur clique sur "annuler" et non pas quand il clique sur "ok".

en passant, vous pouvez raccourcir la fonction UserDeleteConfirmation à:

function UserDeleteConfirmation() {
    return confirm("Are you sure you want to delete this user?");
}
72
répondu Hans Kesting 2012-12-27 18:16:39

il y a des solutions ici qui fonctionneront, mais je ne vois personne expliquer ce qui se passe réellement ici, donc même si c'est vieux de 2 ans je vais l'expliquer.

il n'y a rien de "mal" avec le javascript onclientclick que vous ajoutez. Le problème est que asp.net est d'ajouter il est sur onclick stuff pour courir après quel que soit le code que vous mettez il court.

alors par exemple cette ASPX:

<asp:Button ID="btnDeny" runat="server" CommandName="Deny" Text="Mark 'Denied'" OnClientClick="return confirm('Are you sure?');" />

est transformé en HTML lorsque rendu:

<input name="rgApplicants$ctl00$ctl02$ctl00$btnDeny" id="rgApplicants_ctl00_ctl02_ctl00_btnDeny" 
onclick="return confirm('Are you sure?');__doPostBack('rgApplicants$ctl00$ctl02$ctl00$btnDeny','')" type="button" value="Mark 'Denied'" abp="547">

si vous regardez attentivement, le truc __doPostBack ne sera jamais atteint, parce que le "confirm" retournera toujours true/false avant que __doPostBack ne soit atteint.

C'est pourquoi vous devez avoir l'confirmer que le retour de faux et de ne pas revenir lorsque la valeur est true. Techniquement, peu importe s'il retourne true ou false, tout retour dans ce cas aurait pour effet d'empêcher le __doPostBack d'être appelé, mais pour la convention je partirais pour qu'il retourne false quand false et ne fasse rien pour true.

30
répondu chrismay 2015-06-05 16:25:47

Vous pouvez mettre les réponses ci-dessus dans une ligne comme celle-ci. Et vous n'avez pas besoin d'écrire la fonction.

    <asp:Button runat="server" ID="btnUserDelete" Text="Delete" CssClass="GreenLightButton"
         OnClick="BtnUserDelete_Click" meta:resourcekey="BtnUserDeleteResource1"
OnClientClick="if ( !confirm('Are you sure you want to delete this user?')) return false;"  />
13
répondu Praveen Mitta 2013-02-22 14:29:49

utilisation de la boîte de dialogue jQuery UI:

SCRIPT:

<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<script>
 $(function () {

            $("#<%=btnUserDelete.ClientID%>").on("click", function (event) {
                event.preventDefault();
                $("#dialog-confirm").dialog({
                    resizable: false,
                    height: 140,
                    modal: true,
                    buttons: {
                        Ok: function () {
                            $(this).dialog("close");
                            __doPostBack($('#<%= btnUserDelete.ClientID %>').attr('name'), '');
                        },
                        Cancel: function () {
                            $(this).dialog("close");
                        }
                    }
                });
            });
 });
</script>

HTML:

<div id="dialog-confirm" style="display: none;" title="Confirm Delete">
    <p><span class="ui-icon ui-icon-alert" style="float: left; margin: 0 7px 20px 0;"></span>Are you sure you want to delete this user?</p>
</div>
12
répondu Kapil Khandelwal 2012-12-28 08:32:27

Le code est comme ceci:

Aspx:

<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" CausesValidation=true />

dans Cs:

protected void Page_Load(object sender, System.EventArgs e)
{
     if (!IsPostBack)
     {
         btnSave.Attributes["Onclick"] = "return confirm('Do you really want to save?')";          
     }
}

protected void btnSave_Click(object sender, EventArgs e){
    Page.Validate();
    if (Page.IsValid)
    {
       //Update the database
         lblMessage.Text = "Saved Successfully";
    }
}
5
répondu RckLN 2013-06-21 17:35:22

essaye ceci :

<asp:Button runat="server" ID="btnUserDelete" Text="Delete" CssClass="GreenLightButton" 
   onClientClick=" return confirm('Are you sure you want to delete this user?')" 
   OnClick="BtnUserDelete_Click"  meta:resourcekey="BtnUserDeleteResource1"  />
4
répondu Mahmoud Farahat 2012-12-27 16:49:46

essayez ceci : OnClientClick="return confirm('Are you sure ?');" Définir les éléments suivants : CausesValidation="False"

4
répondu Srinivas 2015-06-25 14:32:13

essaye ceci:

<asp:Button runat="server" ID="btnDelete" Text="Delete"
   onClientClick="javascript:return confirm('Are you sure you want to delete this user?');" OnClick="BtnDelete_Click" />
3
répondu Vinicius 2015-04-22 16:53:40

c'est une façon simple de faire la validation côté client avant la confirmation. Il utilise les ASP.NET validation javascript.

<script type="text/javascript">
    function validateAndConfirm() {
        Page_ClientValidate("GroupName");  //'GroupName' is the ValidationGroup
        if (Page_IsValid) {
            return confirm("Are you sure?");
        }
        return false;
    }
</script>

<asp:TextBox ID="IntegerTextBox" runat="server" Width="100px" MaxLength="6" />
<asp:RequiredFieldValidator ID="reqIntegerTextBox" runat="server" ErrorMessage="Required"
    ValidationGroup="GroupName"  ControlToValidate="IntegerTextBox" />
<asp:RangeValidator ID="rangeTextBox" runat="server" ErrorMessage="Invalid"
    ValidationGroup="GroupName" Type="Integer" ControlToValidate="IntegerTextBox" />
<asp:Button ID="SubmitButton" runat="server" Text="Submit"  ValidationGroup="GroupName"
    OnClick="SubmitButton_OnClick" OnClientClick="return validateAndConfirm();" />

Source: Validation côté Client à l'aide ASP.Net Validator Controls from Javascript

1
répondu Jupiter 2015-07-29 13:56:17

essaye ceci:

function Confirm() {
    var confirm_value = document.createElement("INPUT");
    confirm_value.type = "hidden";
    confirm_value.name = "confirm_value";

        if (confirm("Your asking")) {
            confirm_value.value = "Yes";
            document.forms[0].appendChild(confirm_value);
        }
    else {
        confirm_value.value = "No";
        document.forms[0].appendChild(confirm_value);
    }
}

fonction D'appel de bouton In:

<asp:Button ID="btnReprocessar" runat="server" Text="Reprocessar" Height="20px" OnClick="btnReprocessar_Click" OnClientClick="Confirm()"/>

Dans la classe .méthode d'appel cs:

        protected void btnReprocessar_Click(object sender, EventArgs e)
    {
        string confirmValue = Request.Form["confirm_value"];
        if (confirmValue == "Yes")
        {

        }
    }
0
répondu Anderson Borba 2016-02-12 12:02:37