none
pantalla Alert y confirm con problemas en el navegador RRS feed

  • Pregunta

  • Bueno como me dijo Asier el lunes y Leandro opto por no usar confirm ni alert de javascript uso ventanas modales de Bootstrap

    les dejo el código porque dos motivos, primero creo que es muy simple y le puede si resolvemos el problema a muchas personas, pues todos los navegadores nuevos bloquean esas ventanas emergentes (hasta Microsoft Edge)

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="WebApplication3.WebForm5" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/run_prettify.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.34.7/css/bootstrap-dialog.min.css" rel="stylesheet" type="text/css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.34.7/js/bootstrap-dialog.min.js"></script> <script> function boton() { BootstrapDialog.confirm({ title: 'Confirmacion de Compra', message: 'Usted va a comprar este producto y teiene un costo esta seguro?', type: BootstrapDialog.TYPE_WARNING, // <-- Default value is BootstrapDialog.TYPE_PRIMARY closable: true, // <-- Default value is false draggable: true, // <-- Default value is false btnCancelLabel: 'Cancelar', // <-- Default value is 'Cancel', btnOKLabel: 'Comprar!', // <-- Default value is 'OK', btnOKClass: 'btn-danger', // <-- If you didn't specify it, dialog type will be used, callback: function (result) { if (result) { BootstrapDialog.alert({ title: 'alerta de compra', message: 'comprado', type: BootstrapDialog.TYPE_SUCCESS, }); return true; } else { BootstrapDialog.alert({ title: 'alerta de no compra', message: 'no comprado', type: BootstrapDialog.TYPE_DANGER, }); return false; }; } }); }; </script> </head>

    <body> <form id="form1" runat="server"> <div> <button type="button" class="btn btn-default" onclick="boton()" >Boton HTML</button> <asp:Button ID="Button1" runat="server" OnClientClick="return boton();" Text="Boton c#" /> </div> </form> </body> </html>


    bueno dejo el código entero y bien separado, observaran que hay un script de js y dos botones que los puse para que vean lo que ocurre

    si presiono el botón que dice html funciona bien

    pero si presiono el botón para poder ir al servidor y programarlo con C# no funciona...

    Si tienen alguna ayuda?

    les dejo el código entero para que lo prueben y vean si pueden encontrar el error... hace dos días y aun no pude...

    jueves, 21 de enero de 2016 10:24

Respuestas

  • buen código me gusta para evitar las molestas pantallitas de los nuevos navegadores que cerras y si no recordas que las bloqueaste no te la vuelve a mostrar

    te copio el código: pero para que te funcione usa 

    callback: function (result) { return result;

    cambialo por <%=this.Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this.Button1))%>;        }

    al final deja solamente

    return false;



    Sofia

    • Marcado como respuesta GustavoRom jueves, 21 de enero de 2016 22:23
    jueves, 21 de enero de 2016 15:56

Todas las respuestas

  • >>pero si presiono el botón para poder ir al servidor y programarlo con C# no funciona...

    Que significa "no funciona", se produce un error o no se genera el evento del lado del servidor ?

    Recuerda que tu funcion boton() deberia retornar un true o false pero por fuera del callback

    function boton() {
    
       BootstrapDialog.confirm({
    	  ...
       });
    
       return false;
    };

    ya que ese callback es asincrono y el boton requiere de una respuesta sincrona que pueda usar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 21 de enero de 2016 11:00
  • Impresionante lo que sabes...

    Tengo un problema se ven las ventanas modales al hacer lo que dijiste.

    function boton() {
    
       BootstrapDialog.confirm({
    	  ...
       });
    
       return false;
    };

    esto esta OK

    el problema es este creo un boton y un label

    <asp:Button ID="Button1" runat="server" OnClientClick="return boton();" Text="Boton c#" OnClick="Button1_Click" />
            
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

    y en C# creo un código simple para ver si llega

    protected void Button1_Click(object sender, EventArgs e)
            {
                Label1.Text = "llegando";
            }

    y no llega... pues tengo un return false fuera del script.

    trato de hacer algo así:

    function boton() {
                           var result = false;
                           BootstrapDialog.confirm({
                               title: 'Confirmacion de Compra',
                               message: 'Usted va a comprar este producto y teiene un costo esta seguro?',
                               type: BootstrapDialog.TYPE_WARNING, // <-- Default value is BootstrapDialog.TYPE_PRIMARY
                               closable: true, // <-- Default value is false
                               draggable: true, // <-- Default value is false
                               btnCancelLabel: 'Cancelar', // <-- Default value is 'Cancel',
                               btnOKLabel: 'Comprar', // <-- Default value is 'OK',
                               btnOKClass: 'btn-success', // <-- If you didn't specify it, dialog type will be used,
                               callback: function (result) {
                                   if (result) {
                                       BootstrapDialog.alert({
                                           title: 'alerta de compra',
                                           message: 'comprado',
                                           type: BootstrapDialog.TYPE_SUCCESS,
                                           closable: true, // <-- Default value is false
                                           draggable: true, // <-- Default value is false                                       
                                           callback: function (result)
                                           {
                                               return result;
                                           }
                                       });
                                      
                                   } else {
                                       BootstrapDialog.alert({
                                           title: 'alerta de no compra',
                                           message: 'no comprado',
                                           type: BootstrapDialog.TYPE_DANGER,
                                       });
                                       
                                   };
                               }
                               
                           });
    
                           if (!result) {
                               return false;
                           }
                           else {
                               return true;
                           }
                           
    
                       };

    Pero no funciona...

    conclusión: si pongo return false se ve las ventanas modales pero no pasa al código c#

    y si pongo un return true no se ven las ventanas modales y pasa automáticamente al código c#

    Como hago para que lea las dos cosas... muchas gracias



    • Editado GustavoRom jueves, 21 de enero de 2016 12:50
    jueves, 21 de enero de 2016 11:35
  • >>y no llega... pues tengo un return false fuera del script.

    exacto si desde el boton vas a lanzar un alert en javascript no puedes al mismo tiempo realizar un evento en el servidor, porque perderias el alert al recargarse la pagina

    podrias hacerlo si implementas ajax, podrias mostrar el mensaje y con jquery invocar un evento en el servidor, pero no podrias cambiar el texto de controles

    para lo que intentas deberias usar codigo cliente, con jquery seria

    $("#<%=Label1.ClientID%>").html("llegando");

    o sea codigo cliente con acciones en el servidor no puede realizarlas, o haces todo en el servidor o todo en el cliente

    podrias un mix si usas los controles de ajax toolkit con el ModalPopupExtender

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 21 de enero de 2016 13:59
  • buen código me gusta para evitar las molestas pantallitas de los nuevos navegadores que cerras y si no recordas que las bloqueaste no te la vuelve a mostrar

    te copio el código: pero para que te funcione usa 

    callback: function (result) { return result;

    cambialo por <%=this.Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this.Button1))%>;        }

    al final deja solamente

    return false;



    Sofia

    • Marcado como respuesta GustavoRom jueves, 21 de enero de 2016 22:23
    jueves, 21 de enero de 2016 15:56
  • Hola

    utiliza un OnClick,,,, asi

    en el codebehind o codefile o simplemente doble click en el botón y te genera algo asi

    protectedvoidButton1_Click(objectsender, EventArgse)

        {      

             ScriptManager.RegisterStartupScript(this, GetType(), "Popup", "boton();", true);

        }


    e

    miércoles, 14 de junio de 2017 23:06