none
UpdatePanel no funciona con Rewrite RRS feed

  • Pregunta

  • Buenas a todos.

    Estaba desarrollando una página, la cual carga datos en un UpdatePanel en función a unos parámetros, la carga asíncrona funcionaba perfectamente hasta que he añadido el modulo rewrite en en system.webserver de mi webconfig para ocultar las extensiones .aspx de mis páginas. Ahora, aunque el filtro sigue funcionando, no se hace de manera asíncrona y se recarga la página completa.

    Si quito el system.webserver y todo su contenido me vuelve a funcionar (ya sea añadiendo manualmente el .aspx en la barra de direcciones o bien en el enlace). Como curiosidad decir que si hago esto (borrar el system.webserver, ejecutandolo y volviendolo a añadir) funciona temporalmente hasta que pulso CTRL+F5 para recargar todo los CSS.

    En mi ScriptManager tengo la propiedad EnablePartialRendering="true".

    ¿Qué puedo hacer para que funcione correctamente?

    Mi codigo:

    En webconfig

      <system.webServer>
        <rewrite>
          <rules>
            <rule name="RewriteASPX">
              <match url="(.*)"/>
              <conditions logicalGrouping="MatchAll">
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
              </conditions>
              <action type="Rewrite" url="{R:1}.ASPX"/>
            </rule>
          </rules>
        </rewrite>
      </system.webServer>

    El scriptManager

    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"></asp:ScriptManager>

    Uno de los UpdatePanels que tengo

        <asp:UpdatePanel runat="server" ID="btn_busqueda">
            <ContentTemplate>
                <div class="row justify-content-center">
                    <%-- columna para seleccionar socio. Splo administrador --%>
                    <div class="col-md-3" runat="server" id="divSelSocio" visible="false">
                        <div class="row justify-content-center">
                            <div class="col-md-2 centrado">
                                <label class="textInput miInput">Socio:</label>
                            </div>
                            <div class="col-md-10 centrado">
                                <asp:DropDownList ID="DD_Socio" runat="server" class="form-control alinearArriba" AutoPostBack="true" OnTextChanged="DD_Socio_TextChanged">
                                </asp:DropDownList>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-3" >
                        <div class="row justify-content-center">
                            <div class="col-md-2 centrado">
                                <label class="textInput">Año:</label>
                            </div>
                            <div class="col-md-10 centrado">
                                <asp:DropDownList ID="DD_anio" runat="server" class="form-control alinearArriba" AutoPostBack="true" OnTextChanged="DD_anio_TextChanged">
                                </asp:DropDownList>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-3">
                        <div class="row justify-content-center">
                            <div class="col-md-2 centrado">
                                <label class="textInput">Mes:</label>
                            </div>
                            <div class="col-md-10 centrado">
                                <asp:DropDownList ID="DD_Mes" runat="server" class="form-control alinearArriba" AutoPostBack="true">
                                </asp:DropDownList>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-1">
                        <asp:Button runat="server" Text="Filtrar" ID="BT_Filtrar" OnClick="BT_Filtrar_Click" CssClass="btnFacturas"/>
                    </div>
                </div>
        </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="DD_anio" EventName="TextChanged" />
                <asp:AsyncPostBackTrigger ControlID="DD_Socio" EventName="TextChanged" />
            </Triggers>
        </asp:UpdatePanel>

    • Editado kasmo99 miércoles, 2 de enero de 2019 12:06
    miércoles, 2 de enero de 2019 12:03

Respuestas

  • Finalmente lo he resuelto de esta forma:

    Dado que el Rewrite sólo lo usaba para ocultar la extensión .aspx en mi url, lo que quitado y para conseguir esto mismo, he instalado mediante el NuGet el paquete "Microsoft.AspNet.FriendlyUrls". Una vez instalado, he creado un Global.asax y en su método  Aplication_Start he puesto lo siguiente:

    protected void Application_Start(object sender, EventArgs e)
            {
                RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
            }

    Con esto ya consigo que las URLs sean amigables, sin la extensión .aspx y me funcionan correctamente todos los UpdatePanels de mi web.

    • Marcado como respuesta kasmo99 viernes, 4 de enero de 2019 15:18
    viernes, 4 de enero de 2019 15:18

Todas las respuestas

  • Hola  kasmo99

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisión a profundidad acerca del inconveniente que se te está presentando.

    Proporcionaremos una respuesta lo más pronto posible.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    miércoles, 2 de enero de 2019 18:45
    Moderador
  • Hola, Cuando usaa el módulo de URL Rewrite para volver a escribir la URL de una página que contiene uno o más controles UpdatePanel, el control usará la URL reescrita para todas las acciones que realiza ese control UpdatePanel. Esto puede hacer que los controles en el control UpdatePanel no funcionen correctamente, especialmente en los casos en que la reescritura de URL cambia la jerarquía de directorios de la URL solicitada.

    Puedes intentar configurar la URL de acción a la URL original

    protected void Page_Load(object sender, EventArgs e) 
    { 
        form1.Action = Request.RawUrl; 
    }

    o también probar

    protected void Page_Load(object sender, EventArgs e)
    {
    
            if ( !String.IsNullOrEmpty(Context.Request.ServerVariables["HTTP_X_ORIGINAL_URL"]) )
                form1.Action = Context.Request.ServerVariables["HTTP_X_ORIGINAL_URL"];
    }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 3 de enero de 2019 9:20
    Moderador
  • Buenos días. 

    En primer lugar, dar las gracias por la respuesta.

    He puesto ese fragmento de código en mi página Master, haciendo referencia al form que ahí se declara pero no me ha funcionado. Es así o lo he malentendido?

    Un saludo.

    jueves, 3 de enero de 2019 10:59
  • Hola, cómo tienes definida tu MasterPage? Algo asi?

    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="Site" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
     <title>Untitled Page</title>
     <asp:ContentPlaceHolder id="head" runat="server">
     </asp:ContentPlaceHolder>
    </head>
    <body>
     <form id="form1" runat="server">
     <div>
     <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
     
     </asp:ContentPlaceHolder>
     </div>
     </form>
    </body>
      FIJATE en lo marcado en negro


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos



    jueves, 3 de enero de 2019 12:21
    Moderador
  • Sí, así la tengo.

    <body>
        <form runat="server" id="formPrincipal">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"></asp:ScriptManager>
        <div class="container-fluid">
            <div>
                <asp:ContentPlaceHolder ID="CuerpoWeb" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </div>
        </form>
    </body>

    • Editado kasmo99 jueves, 3 de enero de 2019 13:02
    jueves, 3 de enero de 2019 12:38
  • Pues entonces aplica 
    formPrincipal.Action = Request.RawUrl; 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 3 de enero de 2019 13:49
    Moderador
  • Ya apliqué eso. Y también probé con 

    if ( !String.IsNullOrEmpty(Context.Request.ServerVariables["HTTP_X_ORIGINAL_URL"]) )
                formPrincipal.Action = Context.Request.ServerVariables["HTTP_X_ORIGINAL_URL"];

    En el Page_Load de mi página master, pero sigue sin funcionar. Cada vez que se ejecuta un evento hace una recarga completa de la página en lugar de actualizar el contenido del UpdatePanel

    jueves, 3 de enero de 2019 14:00
  • Buenas, acabo de descubrir una cosa. Ese problema que tenía, era al ejecutar desde Visual Studio. Acabo de instalar IIS para hacer pruebas y he visto que ahí si funciona correctamente. No se cual es el problema pero sabiendo que funciona al publicarse sobre un IIS "de verdad" no me preocupa.

    Muchas gracias de todos modos, si consigo descubrir que está fallando al ejecurlo desde VS lo publicaré por aquí.

    jueves, 3 de enero de 2019 15:59
  • Hola, qué funciona? Poniendo 

    ormPrincipal.Action = Request.RawUrl; ?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 3 de enero de 2019 16:13
    Moderador
  • Bueno, haré nuevas pruebas, me acabo de dar cuenta que al publicarlo en IIS recién instalado funcionaba, pero si pulso CTRL+F5 vuelve a dar el error. En principio con ese código también me falla. Intento sacar algo en claro y lo comento por aquí.
    viernes, 4 de enero de 2019 7:16
  • Finalmente lo he resuelto de esta forma:

    Dado que el Rewrite sólo lo usaba para ocultar la extensión .aspx en mi url, lo que quitado y para conseguir esto mismo, he instalado mediante el NuGet el paquete "Microsoft.AspNet.FriendlyUrls". Una vez instalado, he creado un Global.asax y en su método  Aplication_Start he puesto lo siguiente:

    protected void Application_Start(object sender, EventArgs e)
            {
                RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
            }

    Con esto ya consigo que las URLs sean amigables, sin la extensión .aspx y me funcionan correctamente todos los UpdatePanels de mi web.

    • Marcado como respuesta kasmo99 viernes, 4 de enero de 2019 15:18
    viernes, 4 de enero de 2019 15:18