web-dev-qa-db-fra.com

Confirmer le postback OnClientClick, bouton 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'entre eux ne fonctionne.

44
makambi

Essaye ça:

<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é que lorsque l'utilisateur clique sur "annuler" et non lorsqu'il clique sur "ok".

En passant, vous pouvez raccourcir la fonction UserDeleteConfirmation pour:

function UserDeleteConfirmation() {
    return confirm("Are you sure you want to delete this user?");
}
77
Hans Kesting

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

Il n'y a rien de "faux" avec le javascript que vous ajoutez sur onclientclick. Le problème est que asp.net ajoute que c'est sur onclick de fonctionner après le code que vous avez inséré.

Ainsi, par exemple, cet ASPX:

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

est transformé en ce code HTML lors du 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 de plus près, les informations sur __doPostBack ne seront jamais atteintes, car la confirmation confirmera toujours vrai/faux avant que __doPostBack ne soit atteint.

C'est pourquoi vous avez besoin que la confirmation renvoie uniquement false et non lorsque la valeur est true. Techniquement, peu importe si elle renvoie true ou false, tout retour dans ce cas aurait pour effet d'empêcher l'appel de __doPostBack, mais par convention, je le laisserais de sorte qu'il renvoie false lorsque false et ne fait rien pour true .

32
chrismay

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
Praveen Mitta

Utilisation de la boîte de dialogue jQuery UI:

SCÉNARIO:

<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
Kapil Khandelwal

Le code est comme ça:

En Aspx:

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

en 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
RckLN

essaye ça : 

<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"  />
5
Mahmoud Farahat

essayez ceci: OnClientClick="return confirm('Are you sure ?');" Définissez également: CausesValidation="False"

4
Srinivas

Essaye ça:

<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
Vinicius

C’est un moyen simple d’effectuer la validation côté client AVANT la confirmation . Il utilise le code de validation javascript intégré ASP.NET.

<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 des contrôles ASP.Net Validator de Javascript

1
Jupiter

Essaye ça:

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);
    }
}

Dans la fonction d'appel de bouton:

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

En classe .cs méthode d'appel:

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

        }
    }
0
Anderson Borba