Pregunta

Tengo una lista desplegable con autopostback configurado en verdadero.Quiero que el usuario confirme si realmente quiere cambiar el valor, que en Post Back dispara un evento del lado del servidor (SelectedIndexChanged).

Intenté agregar un atributo de cambio "confirmación de devolución ('Haga clic en Aceptar para cambiar.De lo contrario, haga clic en Cancelar? '; ") Pero no se postula independientemente del resultado de confirmación y el valor en la lista no vuelve a verse si se cancela seleccionado.

Cuando elimino el atributo onchange de la etiqueta DropdownList, la página realiza una devolución de datos.No es así cuando se agrega el atributo onchange.¿Todavía necesito conectar el controlador de eventos (estoy en C# .Net 2.0)?

Cualquier pista será útil.

¡Gracias!

¿Fue útil?

Solución

¿Ha intentado configurar el evento onChange en una función de JavaScript y luego, dentro de la función, mostrar la alerta de JavaScript y utilizar la función __doPostback si pasa?

es decir.

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

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

Otros consejos

Puede utilizar el control CustomValidator para "validar" el menú desplegable llamando a una función de JavaScript en la que realiza la confirmación():

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

Lo siguiente funciona cuando DropDownList activa devoluciones de datos parciales:

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

Actualmente, siempre estás devolviendo el resultado de la confirm(), así que incluso si regresa true, aún así detendrás la ejecución del evento antes de que se pueda activar la devolución de datos.Su onchange debería return false; sólo cuando el confirm() también le gusta esto:

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

Anular el atributo onchange no funcionará si AutoPostBack está configurado en verdadero porque ASP.NET siempre agregará lo siguiente al final de su secuencia de comandos onchange:

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

Si configura AutoPostBack en falso, anule onchange con un script de tipo "confirmar y __doPostBack" (ver arriba, err...a continuación) funcionará, pero es posible que deba crear manualmente la función __doPostBack.

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

Siempre regresa, por lo que el evento OnSelectedIndexChanged de la lista desplegable se activa si el usuario hace clic en Aceptar o CANCELAR.

Asegúrese de que su evento esté cableado:

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

También puede aplicar un atributo del lado del cliente para devolver la confirmación.Establezca el índice en consecuencia si se cancela.

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;

Escriba la función en línea y no tenga un "retorno" para la condición en la que desea que se le devuelva una publicación.Esto funciona y cumple con los estándares.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top