Domanda

Ho una dropdownlist con l'autopostback impostata su true.Voglio il utente per confermare se si vuole davvero cambiare il valore, che post indietro incendi un evento lato server (selectedindexchanged).

Ho provato ad aggiungere un attributo onchange "return confirm('si Prega di fare clic su OK per cambiare.Altrimenti, fare clic su ANNULLA?';") ma non sarà il postback indipendentemente dalla conferma risultato e il valore nell'elenco non tornare se annullare selezionate.

Quando si rimuove l'attributo onchange dalla DropdownList tag, la pagina fa il postback.Non quando l'attributo onchange è aggiunto.Non ho ancora bisogno di legare il gestore di eventi (sono su C# .Net 2.0 ).

Ogni porta sarà utile.

Grazie!

È stato utile?

Soluzione

Hai provato a impostare l'evento onChange di una funzione javascript e quindi all'interno della funzione di visualizzazione alert di javascript e utilizzare il __doPostback funzione se passa?

cioè

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

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

Altri suggerimenti

È possibile utilizzare il controllo CustomValidator "convalidare" a discesa, chiamando una funzione javascript che ti do la conferma():

        <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"  />

Le seguenti opere, quando la DropDownList è l'attivazione parziale postback:

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

Attualmente, si sta sempre riportando il risultato della confirm(), quindi , anche se si restituisce true, avrai ancora interrompere l'esecuzione dell'evento prima che il postback di fuoco.Il onchange dovrebbe return false; solo quando il confirm() non, troppo, come questo:

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

Ignorando l'attributo onchange non funziona se avete AutoPostBack impostata a vero, dato ASP.NET sarà sempre aggiungere quanto segue alla fine del vostro onchange script:

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

Se si imposta AutoPostBack a false, quindi imperativo onchange con un "confermare e __doPostBack" tipo di script (vedi sopra, err..qui di seguito) funzionerà, ma potrebbe essere necessario creare manualmente il __doPostBack funzione.

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

Restituisce sempre così dropdownlist del OnSelectedIndexChanged evento viene generato se l'utente fa clic su OK o ANNULLA.

Assicurarsi che il vostro evento sia via cavo:

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

È inoltre possibile applicare un client-side attributo di restituire la conferma.Impostare l'indice di conseguenza se annullata.

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;

Scrivere la funzione inline e non hanno un "ritorno" per la condizione in cui si desidera un post indietro.Questo funziona ed è secondo le norme.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top