Question

J'ai une liste déroulante avec l'autopostback défini sur true. je veux le l'utilisateur pour confirmer s'il veut vraiment changer la valeur, qui, après le post-back, déclenche un événement côté serveur (selectedindexchanged).

J'ai essayé d'ajouter un attribut onchange " return confirm ('Cliquez sur OK pour modifier. Sinon, cliquez sur ANNULER?'; "), mais la publication ne sera pas prise en compte, quelle que soit la confirmation. résultat et la valeur dans la liste ne revient pas si annuler choisi.

Lorsque je supprime l'attribut onchange de la balise DropdownList, la page effectue une publication. Ce n'est pas le cas lorsque l'attribut onchange est ajouté. Dois-je toujours connecter le gestionnaire d'événements (je suis sur C # .Net 2.0).

Toute piste sera utile.

Merci!

Était-ce utile?

La solution

Avez-vous essayé de définir l'événement onChange sur une fonction javascript puis, à l'intérieur de celle-ci, affichez l'alerte javascript et utilisez la fonction __doPostback si elle réussit?

c'est-à-dire

   
drpControl.Attributes("onChange") = "DisplayConfirmation();"

function DisplayConfirmation() {
  if (confirm('Are you sure you want to do this?')) {
    __doPostback('drpControl','');
  }
}

Autres conseils

Vous pouvez utiliser le contrôle CustomValidator pour "valider". liste déroulante en appelant une fonction javascript dans laquelle vous effectuez la confirmation ():

        <asp:DropDownList ID="TestDropDown" runat="server" AutoPostBack="true" CausesValidation="true"
            ValidationGroup="Group1"
            OnSelectedIndexChanged="TestDropDown_SelectedIndexChanged">
            <asp:ListItem Value="1" Text="One" />
            <asp:ListItem Value="2" Text="Two" />
        </asp:DropDownList>
       <script type="text/javascript">
            function ConfirmDropDownValueChange(source, arguments) {
                arguments.IsValid = confirm("Are you sure?");
            }
        </script>
        <asp:CustomValidator ID="ConfirmDropDownValidator" runat="server"
            ClientValidationFunction="ConfirmDropDownValueChange" Display="Dynamic" ValidationGroup="Group1"  />

Ce qui suit fonctionne lorsque DropDownList déclenche des publications partielles:

// caching selected value at the time the control is clicked
MyDropDownList.Attributes.Add(
    "onclick",
    "this.currentvalue = this.value;");

// if the user chooses not to continue then restoring cached value and aborting by returning false
MyDropDownList.Attributes.Add(
    "onchange",
    "if (!confirm('Do you want to continue?')) {this.value = this.currentvalue; return false};");

Actuellement, vous renvoyez toujours le résultat du confirm () . Ainsi, même s'il renvoie true , vous arrêterez toujours l'exécution de l'événement avant le postback peut tirer. Votre onchange doit renvoyer false; uniquement lorsque confirm () le fait également, comme ceci:

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

Le remplacement de l'attribut onchange ne fonctionnera pas si AutoPostBack est défini sur true, car ASP.NET ajoutera toujours les éléments suivants à la fin de votre script onchange:

;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)

Si vous définissez AutoPostBack sur false, le remplacement de l'échange par un " confirm et __doPostBack " Le type script (voir ci-dessus, err .. ci-dessous) fonctionnera, mais vous devrez peut-être créer manuellement la fonction __doPostBack.

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

Renvoie toujours toujours l'événement DropIselexChanged sélectionné par dropdownlist, que l'utilisateur clique sur OK ou sur ANNULER.

Assurez-vous que votre événement est câblé:

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

Vous pouvez également appliquer un attribut côté client pour renvoyer la confirmation. Définissez l'index en conséquence en cas d'annulation.

dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
&lt;asp:DropDownList runat="server" ID="ddlShailendra"  AutoPostBack="True" OnSelectedIndexChanged="ddlShailendra_SelectedIndexChanged" onchange="javascript: { if(confirm('Click ok to prevent post back, Cancel to make a postback'))return true;} " &gt;
          &lt;asp:ListItem Text="tes" Value="1" >&lt;/asp:ListItem&gt;
            &lt;asp:ListItem Text="test" Value="-1"&gt;&lt;/asp:ListItem&gt;
            &lt;/asp:DropDownList&gt;

Ecrivez la fonction en ligne sans le & retour; retour " pour la condition dans laquelle vous voulez un post de retour. Cela fonctionne et est conforme aux normes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top