lunes, 4 de abril de 2011

Error en PostBack en página por defecto

Está claro que esta semana va a ser la semana de los posts “estoy subiendo una aplicación a un servidor dedicado y me encuentro problemas variopintos”.

En esta ocasión ha sido un problema (perdón, quise decir issue) que tiene ASP.NET y que consiste en que si se accede a la aplicación sin especificar el nombre de página (por ejemplo, panicoenlaxbox.com en vez de panicoenlaxbox.com/default.aspx) los eventos asociados en el código del servidor no se enlazan. Es decir, pones un botón en la página .aspx y enlazas un manejador en código de la página y éste nunca se engancha a no ser que se haya especificado el nombre de página.

No me preguntes porqué porque esto me parece un super “issue”, bueno en realidad me parece un “bug”… en realidad es algo incomprensible y que es la primera vez que me pasa, así que no es muy reproducible, pero bueno…

La solución la encontré aquí (menos mal que este caballero también escribe un blog sino todavía estoy tirándome de los pelos). De hecho, poco más información he podido encontrar al respecto, sino hilos de gente desesperada como este.

Mi solución ha pasado por un híbrido entre la solución primera y la mía propia, un poco menos agresiva creo, ya que en vez de hacer un Redirect a la página por defecto lo que hago es establecer la propiedad Action del formulario.

    Private Sub _Default_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not IsPostBack Then

            Dim newUrl As String = GetASPNETPostbackOnDefaultPage()

            If Not String.IsNullOrEmpty(newUrl) Then

                Form.Action = newUrl

            End If

        End If

    End Sub

 

    Public Function GetASPNETPostbackOnDefaultPage() As String       

        Dim defaultPage As String = "default.aspx"

        Dim rawUrl As String = Request.RawUrl

        If rawUrl.ToLower().IndexOf(defaultPage) < 0 Then

            Dim newUrl As String

            If rawUrl.IndexOf("?") >= 0 Then

                ' URL contains query string

                Dim urlParts As String() = rawUrl.Split("?".ToCharArray(), 2)

                newUrl = urlParts(0) & defaultPage & "?" & urlParts(1)

            Else

                newUrl = If((rawUrl.EndsWith("/")), rawUrl & defaultPage, rawUrl & "/" & defaultPage)

            End If

            Return newUrl

        Else

            Return String.Empty

        End If

    End Function

 

Un saludo!

No hay comentarios:

Publicar un comentario