in

error en el cierre de popup con ajax

Last post 06-20-2007 9:12 by jbejarano. 7 replies.
Page 1 of 1 (8 items)
Sort Posts: Previous Next
  • 06-11-2007 13:37

    • jbejarano
    • Top 25 Contributor
    • Joined on 06-11-2007
    • Posts 5
    • Points 93

    error en el cierre de popup con ajax

    Hola a todos!

    Estoy desarrollando una aplicación que lanza un PopUp en Ajax al pulsar cierto botón, y tengo un problema a la hora de cerrar dicho PopUp.

    El problema viene cuando trabajo con un "handler" que enmascara la url, por ejemplo, si es www.domain.com/loqsea.html, lo transfiere a www.domain.com/Carp1/default.aspx. A la hora de cerrar el PopUp, desde www.domain.com/Carp1/default.aspx sin enmascarar lo hace sin problemas, pero cuando la dirección está enmascarada, la primera vez lo cierra bien pero la segunda da el error siguiente:Sys.WebForms.PageRequestManagerServerErrorException: An unknown error ocurred while processing the request on the server. The status code returned from the server was: 12030

    he hecho un pequeño ejemplo, esta es la estructura:

    carp1/default.aspx:

    <head runat="server">
        <title>2</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <div>    
            <asp:UpdatePanel ID="update1" runat="server">
                <ContentTemplate>
                    <asp:Panel ID="panel1" runat="server" Style="width:480px;height:200px; background-color: Aqua;">
                    soy un panel   
                    <asp:Button ID="cerrar" runat="server" text="cerrar" OnClick="cerrar_Click" />
                    </asp:Panel>
                    Boton:
                    <asp:Button ID="boton2" runat="server" Text="Pulsame" OnClick="boton_Click" />
                    <ajaxToolkit:ModalPopupExtender ID="mpe" runat="server" TargetControlID="boton2"
                            PopupControlID="panel1" DropShadow="true" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="boton2" EventName="Click" />
                </Triggers>
            </asp:UpdatePanel>
           
            </div>
        </form>   
    </body>
    </html>

     carp1/default.aspx.cs

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }    protected void boton_Click(object sender, EventArgs e)
        {    }
        protected void cerrar_Click(object sender, EventArgs e)
        {
            mpe.Hide();
        }   
    }

    handler en el global.asax:

    protected void Application_BeginRequest(Object sender, EventArgs e)
        {
            int ptoHtml;

            //tipo: http://www.domain.com/pagina.html


            string urlTo = Request.Url.ToString().ToLower();      //devuelve la url en minuscula
            ptoHtml = urlTo.IndexOf(".html");

            if (ptoHtml > -1)
            {

                Server.Transfer("~/Carp1/Default.aspx", false);
            }
        }

     Como decía, no cierra bien cuando pones una dirección tipo www.domain.com/loqsea.html. Muchas gracias por vuestra ayuda, un saludo!

    eConcept Consulting
    Internet Business Solutions
    http://econcept.es
    • Post Points: 39
  • 06-12-2007 22:30 In reply to

    Re: error en el cierre de popup con ajax

    Hola,

    Yo creo que el error que obtienes puede venir motivado básicamente de tener el ModalPopupExtender dentro del UpdatePanel, el extender ya hace uso de la funcionalidad AJAX sin necesidad de tenerlo ahí dentro. ¿para qué lo metías ahí exactamente?

    Prueba a quitarlo y verás que ya funciona sin darte ese error. El otro problema que encontrarás está relacionado con la forma en la que estás enmascarando la URL, en lugar de hacer el Server.Transfer (que en realidad no enmascara sino que redirecciona la petición sin notificárselo al cliente) utiliza el método RewritePath de la clase HttpContext, el cual puedes utilizar tanto declarativamente como configurando la reescritura de las url a través del web.config.

    Saludos.

    Jose Fco Bonnin
    -----------------------
    Coordinador Baleares on .NET
    www.josefcobonnin.com
    • Post Points: 22
  • 06-13-2007 9:56 In reply to

    • jbejarano
    • Top 25 Contributor
    • Joined on 06-11-2007
    • Posts 5
    • Points 93

    Re: error en el cierre de popup con ajax

    Hola Jose, muchas gracias por tu respuesta.

    He intentado aislar el error para verlo de forma más sencilla. El fallo viene de otro lado que no es el ModalPopupExtender, sino al usar el UpdatePanel.

    En este pequeño código se ve el fallo que decía:

    Carp1/Default.aspx

    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <div>            
                <asp:UpdatePanel ID="up" runat="server">
                    <ContentTemplate>
                        <asp:Literal ID="lit" runat="server"></asp:Literal>
                        <asp:Button ID="Boton" runat="server" OnClick="Boton_Click" />
                    </ContentTemplate>
                </asp:UpdatePanel>
            </div>
        </form>
    </body>

    Carp1/Default.aspx.cs

        protected void Boton_Click(object sender, EventArgs e)
        {
            lit.Text += "hola mundo ";
        }

    Global.asax

    protected void Application_BeginRequest(Object sender, EventArgs e)
        {
            int ptoHtml;
            //tipo: http://www.domain.com/pagina.html
            string urlTo = Request.Url.ToString().ToLower();
            ptoHtml = urlTo.IndexOf(".html");

            if (ptoHtml > -1)
            {
                HttpContext.Current.RewritePath("~/Carp1/Default.aspx", false);
            }
        }

    Desde www.domain.com/Carp1/Default.aspx va perfecto, pero desde www.domain.com/loqsea.html al segundo click en el botón da el error que comentaba. A qué debe ser debido?

    Muchas gracias, un saludo!

    eConcept Consulting
    Internet Business Solutions
    http://econcept.es
    • Post Points: 22
  • 06-13-2007 18:37 In reply to

    Re: error en el cierre de popup con ajax

    Hola,

    Estaba mirando con el webdevhelper las peticiones que hace y así ver exactamente cuál podía ser el problema.

    Lo que ocurre es que al rescribir la llamada de www.domain.com/loqsea.html a www.domain.com/Carp1/Default.aspx, como tu dices, la primera vez funciona perfecto. Pero después de haber hecho el postback asyncrono al pulsar el botón otra vez la petición no se hace a www.domain.com/Carp1/Default.aspx sino a www.domain.com/Default.aspx, por lo que parece que pierde el "Carp1" de la url, que es donde está la página que solicitas. En cambio, si en lugar de acceder a www.domain.com/loqsea.html accedes a www.domain.com/Carp1/loqsea.html verás que funciona todo el tiempo.

    También funciona si sacas el botón de dentro del UpdatePanel o si utilizas un PostBackTrigger, aunque claro, ahí ya pierde la gracia.

    Sé que no es una solución pero conociendo un poco más problema tal vez puedas buscar un workaround para tu caso concreto.

    Intentaré darle otro vistazo, si consigo algo más de información lo comentaré por aquí.

    Jose Fco Bonnin
    -----------------------
    Coordinador Baleares on .NET
    www.josefcobonnin.com
    • Post Points: 5
  • 06-14-2007 9:02 In reply to

    • jjofre
    • Top 10 Contributor
    • Joined on 01-24-2007
    • Posts 112
    • Points 1,434

    Re: error en el cierre de popup con ajax

    He encontrado en http://forums.asp.net/p/1048030/1474311.aspx una recomendación de workarround para el problema: utilizar response.redirect (se ve que el problema está en el uso de server.transfer combinado con el toolkit de AJAX). En http://vijaymodi.wordpress.com/2007/04/13/syswebformspagerequestmanagerparsererrorexception/ también opinan lo mismo que Jose (proponen no utilizar asincronía, sino un PostBackTrigger). Un saludo.

    Javier Jofre
    Coordinador Baleares on .NET
    http://www.balearsinnovacio.com/blog/
    Filed under:
    • Post Points: 22
  • 06-15-2007 12:09 In reply to

    • jbejarano
    • Top 25 Contributor
    • Joined on 06-11-2007
    • Posts 5
    • Points 93

    Re: error en el cierre de popup con ajax

    Hola, gracias por vuestras respuestas.

    He estado mirando las distintas soluciones que proponían en los enlaces que me decís, pero ninguna me ha podido solucionar mi problema: No puedo usar el response.redirect, ya que entonces pierde la gracia el enmascarado. Tampoco puedo sacar el botón del Update Panel, ya que éste se encuentra dentro de un popUp que se crea dinámicamente en un ascx.

    ScriptManager.RegisterPostBackControl() lo he probado pero ha seguido dando el error.

    Seguiré probando cosas, a ver si encuentro algo para solucionar el problema. Sino, pues quitaré el ajax hasta que solucionen este bug..

    Un saludo!

    eConcept Consulting
    Internet Business Solutions
    http://econcept.es
    • Post Points: 22
  • 06-15-2007 13:06 In reply to

    Re: error en el cierre de popup con ajax

    Hola,

    Efectivamente el Response.Redirect que decía Javi no es una opción para lo que quieres tu.

    Lo que te comentaba acerca de hacer un PostBackTrigger era haciéndolo de la siguiente manera:

    1 <form id="form1" runat="server"> 2 <asp:ScriptManager ID="ScriptManager1" runat="server" /> 3 <div> 4 <asp:UpdatePanel ID="updatePanel1" runat="server"> 5 <Triggers> 6 <asp:PostBackTrigger ControlID="button1" /> 7 </Triggers> 8 <ContentTemplate> 9 <asp:Button ID="button1" runat="server" OnClick="button1_Click" Text="Push me" /> 10 <asp:Label ID="label1" runat="server"></asp:Label> 11 </ContentTemplate> 12 </asp:UpdatePanel> 13 </div> 14 </form>

    Verás que si no utilizas los postback en background si que funciona, aunque como comentaba, haciendo el postback tradicional hace que pierda la gracia.

    Es una lástima que vayas a abandonar AJAX por esto, podrías hacer una handler con un poco más de código y hacer que añadiese la subcarpeta, recuerda que si accedes a una url enmascarada pero mantienes el base path también funciona, podría ser un workaround válido para ti.

    En cualquier caso le he comentado el issue a un amigo en Microsoft a ver si el consigue decirnos algo más.

    Jose Fco Bonnin
    -----------------------
    Coordinador Baleares on .NET
    www.josefcobonnin.com
    • Post Points: 22
  • 06-20-2007 9:12 In reply to

    • jbejarano
    • Top 25 Contributor
    • Joined on 06-11-2007
    • Posts 5
    • Points 93

    Re: error en el cierre de popup con ajax

    Muchas gracias por tu respuesta, has pensado lo mismo que yo al final: poner en el handler la subcarpeta, y con la función HttpContext.Current.RewritePath va bien. El otro problema que me encontré es que si usas direcciones relativas dentro del popUp, para por ejemplo cargar una imagen desde un skin, se pierde la dirección, ya que busca en un path que no existe. Pero es un error fácil de solucionar pasándole la dirección desde la backPage. Así que al final haciendo este apaño he podido seguir usando el ajax.

    Como decía, gracias, un saludo!

    eConcept Consulting
    Internet Business Solutions
    http://econcept.es
    • Post Points: 5
Page 1 of 1 (8 items)
Baleares on .NET®
Powered by Community Server (Commercial Edition), by Telligent Systems