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