Principales respuestas
Comportamiento extraño tras un validationsummary

Pregunta
-
Hola a todos:
Haciendo pruebas rutinarias he dado con el siguiente comportamiento extraño.
Tengo un validationsummary. Me saca los errores JavaScript que encuentra al pulsar un botón.
En codebehind tengo un sub que hace cuando cambia un valor de un dropdownlist.
Cuando saca errores JavaScript e intento cambiar el valor del dropdownlist, no me lo cambia, sino que permanece inamovible. Si lo intento cambiar por segunda vez, lo ejecuta correctamente.
El mal comportamiento que veo es al sacar errores JavaScript. No ejecuta el cambio del valor del dropdownlist después de sacar los errores JavaScript sino cuando vuelvo a cambiar el valor. Me pasa en todos los dropdownlists. No sé qué puede ser.
Si no hay errores JavaScript, el cambio del valor del dropdownlist se ejecuta correctamente.
Los mensajes JavaScript son
rfvcorreo.ErrorMessage = GetGlobalResourceObject("rgeneral", "correoobligatorio") revcorreo.ErrorMessage = GetGlobalResourceObject("rgeneral", "correoinvalido") rfvasunto.ErrorMessage = GetGlobalResourceObject("rformularios_correo", "asuntoobligatorio") revasunto.ErrorMessage = GetGlobalResourceObject("rformularios_correo", "asuntoinvalido") rfvmensaje.ErrorMessage = GetGlobalResourceObject("rgeneral", "mensajeobligatorio") revmensaje.ErrorMessage = GetGlobalResourceObject("rgeneral", "mensajeinvalido") rfvrespuesta.ErrorMessage = GetGlobalResourceObject("rgeneral", "respuestaobligatoria") revrespuesta.ErrorMessage = GetGlobalResourceObject("rgeneral", "respuestainvalida") rfvfichero.ErrorMessage = GetGlobalResourceObject("rformularios_correo", "ficheroobligatorio") revfichero1.ErrorMessage = GetGlobalResourceObject("rformularios_correo", "ficheroinvalido") revfichero2.ErrorMessage = GetGlobalResourceObject("rformularios_correo", "formatoficheroincorrecto") cvfichero1.ErrorMessage = GetGlobalResourceObject("rformularios_correo", "ficheroexistente") cvfichero2.ErrorMessage = GetGlobalResourceObject("rformularios_correo", "tamanoficheroincorrecto")
Muchísimas gracias si podéis ayudarme.
- Editado volar.2016 sábado, 28 de diciembre de 2019 10:45
Respuestas
-
hola
>>Me saca los errores JavaScript que encuentra al pulsar un botón.
que dicen estos errores de javascript ? los visualizas en la consola del developer tools del browser ?
>>No ejecuta el cambio del valor del dropdownlist después de sacar los errores JavaScript sino cuando vuelvo a cambiar el valor
tienes codigo javascript o jquery asociado a los eventos del combo ?
>>Si no hay errores JavaScript, el cambio del valor del dropdownlist se ejecuta correctamente.
los errores de javascript seguramente impiden que se ejecuten las validaciones de forma correcta, las cuales tambien requieren ejecutar javascript
lo que no queda claro es que generan estos errores de javascript, si es devido un codigo x o si es codigo de las propias validaciones
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Diana AcuñaModerator lunes, 23 de diciembre de 2019 23:42
- Marcado como respuesta Pablo RubioModerator viernes, 27 de diciembre de 2019 15:57
Todas las respuestas
-
hola
>>Me saca los errores JavaScript que encuentra al pulsar un botón.
que dicen estos errores de javascript ? los visualizas en la consola del developer tools del browser ?
>>No ejecuta el cambio del valor del dropdownlist después de sacar los errores JavaScript sino cuando vuelvo a cambiar el valor
tienes codigo javascript o jquery asociado a los eventos del combo ?
>>Si no hay errores JavaScript, el cambio del valor del dropdownlist se ejecuta correctamente.
los errores de javascript seguramente impiden que se ejecuten las validaciones de forma correcta, las cuales tambien requieren ejecutar javascript
lo que no queda claro es que generan estos errores de javascript, si es devido un codigo x o si es codigo de las propias validaciones
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Diana AcuñaModerator lunes, 23 de diciembre de 2019 23:42
- Marcado como respuesta Pablo RubioModerator viernes, 27 de diciembre de 2019 15:57
-
Hola de nuevo:
En codebehind tengo tres procedimientos
Sub Rellenar_extensiones_tamano(ByVal obra As Integer, modopublicacion As Integer, Optional paginapersonal As Boolean = False) Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Cresolia").ConnectionString) Dim sqlc As New SqlCommand("seleccionar_varios", cnconexion) Dim hrs As HttpRuntimeSection = ConfigurationManager.GetSection("system.web/httpRuntime"), inttamano As Integer = hrs.MaxRequestLength * 1000 Dim blnvideos As Boolean = obra = 1 OrElse obra = 9 OrElse obra = 15 Dim blncatalogos As Boolean = obra = 5 OrElse obra = 8 OrElse obra = 12 Dim blnlibros As Boolean = obra = 3 OrElse obra = 6 OrElse obra = 7 OrElse obra = 10 OrElse obra = 14 OrElse obra = 16 Dim intv0extensiones As Integer, strextensiones As String Dim strtamano As String = " kb.", strlimite As String = " kb.", dectamano As Decimal, declimite As Decimal sqlc.CommandType = CommandType.StoredProcedure If Request.QueryString("paginapersonal") = "" AndAlso Not paginapersonal Then If modopublicacion = 1 Then intv0extensiones = Choose(obra, 176, 179, 175, 178, 177, 175, 175, 177, 176, 175, 173, 177, 181, 175, 176, 175) sqlc.Parameters.AddWithValue("@v0", intv0extensiones) cnconexion.Open() strextensiones = Replace(sqlc.ExecuteScalar, " ", ", ") cnconexion.Close() dectamano = inttamano / 1024 If dectamano >= 1000 Then dectamano /= 1000 strtamano = " mb." End If declimite = hftamanoficherolimite.Value / 1024 If declimite >= 1000 Then declimite /= 1000 strlimite = " mb." End If locextensionestamano.Visible = True locextensionestamano.Text = GetGlobalResourceObject("rgeneral", "eltamano") & " " & GetGlobalResourceObject("rgeneral", "hadeserdesde") & " " & Format(declimite, "n2") & strlimite & " " & GetGlobalResourceObject("rgeneral", "hasta") & " " & Format(dectamano, "n2") & strtamano locextensionestamano.Text &= ". " & GetGlobalResourceObject("rgeneral", "lasextensiones") & " " & GetGlobalResourceObject("rgeneral", "handeser") & " " & strextensiones & "." litbrextensionestamano.Visible = True hftamanoficheroprogreso.Value = inttamano Else intv0extensiones = Choose(obra, 128, 131, 0, 135, 133, 0, 0, 133, 128, 0, 0, 133, 182, 0, 128, 0) If blnvideos OrElse blncatalogos OrElse obra = 2 OrElse obra = 4 OrElse obra = 13 Then sqlc.Parameters.AddWithValue("@v0", intv0extensiones) cnconexion.Open() strextensiones = Replace(sqlc.ExecuteScalar, " ", ", ") cnconexion.Close() dectamano = inttamano / 1024 If dectamano >= 1000 Then dectamano /= 1000 strtamano = " mb." End If declimite = hftamanoficherolimite.Value / 1024 If declimite >= 1000 Then declimite /= 1000 strlimite = " mb." End If locextensionestamano.Visible = True locextensionestamano.Text = GetGlobalResourceObject("rgeneral", "eltamano") & " " & GetGlobalResourceObject("rgeneral", "hadeserdesde") & " " & Format(declimite, "n2") & strlimite & " " & GetGlobalResourceObject("rgeneral", "hasta") & " " & Format(dectamano, "n2") & strtamano locextensionestamano.Text &= ". " & GetGlobalResourceObject("rgeneral", "lasextensiones") & " " & GetGlobalResourceObject("rgeneral", "handeser") & " " & strextensiones & "." litbrextensionestamano.Visible = True hftamanoficheroprogreso.Value = inttamano Else locextensionestamano.Visible = False litbrextensionestamano.Visible = False btnenviar.OnClientClick = "" End If End If Else sqlc.Parameters.AddWithValue("@v0", 126) cnconexion.Open() strextensiones = Replace(sqlc.ExecuteScalar, " ", ", ") cnconexion.Close() dectamano = inttamano / 1024 If dectamano >= 1000 Then dectamano /= 1000 strtamano = " mb." End If declimite = hftamanoficherolimite.Value / 1024 If declimite >= 1000 Then declimite /= 1000 strlimite = " mb." End If locextensionestamano.Visible = True locextensionestamano.Text = GetGlobalResourceObject("rgeneral", "eltamano") & " " & GetGlobalResourceObject("rgeneral", "hadeserdesde") & " " & Format(declimite, "n2") & strlimite & " " & GetGlobalResourceObject("rgeneral", "hasta") & " " & Format(dectamano, "n2") & strtamano locextensionestamano.Text &= ". " & GetGlobalResourceObject("rgeneral", "lasextensiones") & " " & GetGlobalResourceObject("rgeneral", "handeser") & " " & strextensiones & "." litbrextensionestamano.Visible = True hftamanoficheroprogreso.Value = inttamano End If sqlc.Dispose() End Sub
Sub Hacer_barra_progreso(Optional paginapersonal As Boolean = False) Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Cresolia").ConnectionString) Dim sqlc As New SqlCommand("seleccionar_varios", cnconexion) Dim intobra As Integer = ddlclasesobras.SelectedValue, intv0extensiones As Integer, intmodo As Integer = ddlmodospublicacion.SelectedValue Dim arrextensiones() As String, strextensiones As String, inti As Integer, intv0tamano As Integer If Request.QueryString("paginapersonal") = "" AndAlso Not paginapersonal Then If intmodo = 1 Then intv0tamano = Choose(intobra, 169, 172, 168, 171, 170, 168, 168, 170, 169, 168, 180, 170, 174, 168, 169, 168) intv0extensiones = Choose(intobra, 176, 179, 175, 178, 177, 175, 175, 177, 176, 175, 173, 177, 181, 175, 176, 175) Else intv0tamano = Choose(intobra, 129, 132, 0, 134, 130, 0, 0, 130, 129, 0, 0, 130, 183, 0, 129, 0) intv0extensiones = Choose(intobra, 128, 131, 0, 135, 133, 0, 0, 133, 128, 0, 0, 133, 182, 0, 128, 0) End If Else intv0tamano = 127 intv0extensiones = 126 End If sqlc.CommandType = CommandType.StoredProcedure cnconexion.Open() sqlc.Parameters.AddWithValue("@v0", intv0tamano) hftamanoficherolimite.Value = sqlc.ExecuteScalar sqlc.Parameters("@v0").Value = intv0extensiones strextensiones = Replace(sqlc.ExecuteScalar, " ", ",") cnconexion.Close() sqlc.Dispose() arrextensiones = strextensiones.Split(",") strextensiones = "^.*\.(" For inti = 0 To arrextensiones.GetUpperBound(0) strextensiones &= Replace(arrextensiones(inti), ".", "") & "|" & Replace(arrextensiones(inti), ".", "").ToUpper & "|" Next strextensiones = Left(strextensiones, Len(strextensiones) - 1) strextensiones &= ")$" revfichero2.ValidationExpression = strextensiones btnenviar.OnClientClick = "Page_ClientValidate('');" btnenviar.OnClientClick &= " if (Page_IsValid)" btnenviar.OnClientClick &= " {if (document.getElementById('fufichero').value!='')" btnenviar.OnClientClick &= " {document.getElementById('dvprogreso').style.display='block';" btnenviar.OnClientClick &= "itv=setInterval(progreso_unfichero, 3000)}} else {document.getElementById('dvprogreso').style.display='none';return false}" End Sub
Sub Seleccionar_asuntos(ByVal s As Object, ByVal e As EventArgs) Handles ddlasuntos.SelectedIndexChanged Dim intasunto As Integer = s.Selectedvalue, intobra As Integer = ddlclasesobras.SelectedValue If intasunto = 2 Then ddltipo.DataBind() rfvfichero.Visible = True cvfichero1.Visible = True cvfichero2.Visible = True trfichero.Visible = True Hacer_barra_progreso() Rellenar_extensiones_tamano(intobra, 1) If Request.QueryString("paginapersonal") = "" Then trclasesobras.Visible = True trmodopublicacion.Visible = True End If trtipo.Visible = True Else rfvfichero.Visible = False cvfichero1.Visible = False cvfichero2.Visible = False trfichero.Visible = False trclasesobras.Visible = False trmodopublicacion.Visible = False locextensionestamano.Visible = False litbrextensionestamano.Visible = False btnenviar.OnClientClick = "" trtipo.Visible = False End If End Sub
El HTML es
<%@ Page CodeFile="formularios_correo.aspx.vb" Inherits="Codigo" %> <!DOCTYPE html> <html> <head runat="server"> <title></title> <script type="text/javascript" src="javascript.js"></script> <link href='Imagenes/favicon.ico' rel='shortcut icon' type='image/x-icon'/> <link rel="stylesheet" type="text/css" href="../Comun/estilos.css" media="screen" /> </head> <body ID="bdcuerpo" style="background-color:#F8F361" runat="server"> <form ID="frm" runat="server"> <asp:HiddenField ID="hftamanoficheroprogreso" runat="server" /> <asp:HiddenField ID="hftamanoficherolimite" runat="server" /> <table class="ancho" border="1"> <tr><th ID="tdtitulo" class="desglose" runat="server" /></tr> </table> <asp:Localize ID="locextensionestamano" visible="false" runat="server" /> <asp:literal ID="litbrextensionestamano" Text="<br />" Visible="false" runat="server" /> <asp:Label ID="lblobligatorios1" Font-Size="10px" runat="server" /> <asp:Label ID="lblobligatorios2" Text="*" ForeColor="red" Font-Size="10px" runat="server" /> <asp:Label ID="lblobligatorios3" Font-Size="10px" runat="server" />. <asp:RequiredFieldValidator ID="rfvcorreo" ForeColor="red" ControlToValidate="txtcorreo" Display="None" runat="server"/> <asp:RegularExpressionValidator ID="revcorreo" ForeColor="red" ControlToValidate="txtcorreo" Display="None" ValidationExpression="^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$" runat="server" /> <asp:RequiredFieldValidator ID="rfvasunto" ForeColor="red" ControlToValidate="txtasunto" Visible="false" Display="None" runat="server"/> <asp:RegularExpressionValidator ID="revasunto" ForeColor="red" ControlToValidate="txtasunto" Display="None" ValidationExpression="[^'<>]*" runat="server" /> <asp:RequiredFieldValidator ID="rfvmensaje" ForeColor="red" ControlToValidate="txtmensaje" Display="None" runat="server"/> <asp:RegularExpressionValidator ForeColor="red" ID="revmensaje" ControlToValidate="txtmensaje" Display="None" ValidationExpression="[^'<>]*" runat="server" /> <asp:RequiredFieldValidator ID="rfvrespuesta" ForeColor="red" ControlToValidate="txtrespuesta" Visible="false" Display="None" runat="server"/> <asp:RegularExpressionValidator ForeColor="red" ID="revrespuesta" ControlToValidate="txtrespuesta" Display="None" ValidationExpression="[^'<>]*" runat="server" /> <asp:RequiredFieldValidator ForeColor="red" ID="rfvfichero" ControlToValidate="fufichero" visible="false" Display="None" runat="server"/> <asp:RegularExpressionValidator ID="revfichero1" ControlToValidate="fufichero" Display="None" ValidationExpression="[^<>(]*" runat="server" /> <asp:RegularExpressionValidator ID="revfichero2" Display="None" ControlToValidate="fufichero" runat="server" /> <asp:CustomValidator ID="cvfichero1" ControlToValidate="fufichero" Visible="false" ForeColor="red" runat="server" /> <asp:CustomValidator ID="cvfichero2" ControlToValidate="fufichero" Visible="false" ForeColor="red" runat="server" /> <asp:ValidationSummary ShowMessageBox="true" ShowSummary="false" runat="server" /> <table class="ancho"> <tr id="trtipo" visible="false" runat="server"><td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:label Text='<%$ Resources:rgeneral, tipo %>' runat="server" /></b></td><td><asp:DropDownList ID="ddltipo" AutoPostBack="true" runat="server" /></td></tr> <tr><td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:label Text='<%$ Resources:rgeneral, correo %>' runat="server" /></b></td><td><asp:TextBox ID="txtcorreo" MaxLength="80" runat="server" /></td></tr> <tr><td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:label Text='<%$ Resources:rgeneral, tasunto %>' runat="server" /></b></td><td><asp:DropDownList ID="ddlasuntos" DataSourceID="sqldsasuntos" AutoPostBack="true" DataTextField="asunto" DataValueField="ac0" runat="server" /> <asp:TextBox ID="txtasunto" Visible="false" MaxLength="80" runat="server" /></td></tr> <tr><td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:label Text='<%$ Resources:rgeneral, mensaje %>' runat="server" /></b></td><td><asp:TextBox ID="txtmensaje" TextMode="MultiLine" Rows="10" Columns="20" runat="server"/></td></tr> <tr><td><b><asp:label ID="lblobligatoriorespuesta" Visible="false" ForeColor="Red" Text="*" runat="server" /> <asp:label ID="lblrespuesta" Text='<%$ Resources:rgeneral, respuesta %>' Visible="false" runat="server" /></b></td><td><asp:TextBox ID="txtrespuesta" TextMode="MultiLine" Rows="10" Columns="20" Visible="false" runat="server"/></td></tr> <tr id="trclasesobras" visible="false" runat="server"><td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:localize ID="locclasesobras" runat="server" /></b></td><td><asp:DropDownList ID="ddlclasesobras" DataSourceID="sqldsclasesobras" AutoPostBack="true" DataTextField="obra" DataValueField="o0" runat="server"/></td></tr> <tr id="trmodopublicacion" visible="false" runat="server"><td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:localize ID="locmodopublicacion" runat="server" /></b></td><td><asp:DropDownList ID="ddlmodospublicacion" AutoPostBack="true" runat="server" /></td></tr> <tr id="trfichero" visible="false" runat="server"><td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:localize ID="locfichero" runat="server" /></b></td><td><asp:FileUpload ID="fufichero" runat="server" /></td></tr> <tr><td colspan="4" class="centro"><asp:Button ID="btnenviar" runat="server" /></td></tr> </table> <div id="dvprogreso" style="display:none"><table id="tbprogreso" class="tablacentradoctro" style="border-spacing:0"> <tr> <td id="thporcentaje" colspan="20">0 %</td> </tr> <tr> <td id="tdbarra1"> </td><td id="tdbarra2"> </td><td id="tdbarra3"> </td><td id="tdbarra4"> </td><td id="tdbarra5"> </td><td id="tdbarra6"> </td><td id="tdbarra7"> </td><td id="tdbarra8"> </td> <td id="tdbarra9"> </td><td id="tdbarra10"> </td><td id="tdbarra11"> </td><td id="tdbarra12"> </td> <td id="tdbarra13"> </td><td id="tdbarra14"> </td><td id="tdbarra15"> </td><td id="tdbarra16"> </td><td id="tdbarra17"> </td><td id="tdbarra18"> </td><td id="tdbarra19"> </td><td id="tdbarra20"> </td> </tr> </table> </div> </form> <script> var maxprogress = 20; var actualprogress = 0; var itv = 0; var inti = 0; function progreso_unfichero() { if (actualprogress >= maxprogress) { clearInterval(itv); return; } actualprogress += 1; document.getElementById('thporcentaje').innerHTML = ' ' + actualprogress * 5 + ' %'; for (inti = 1; inti <= actualprogress; inti++) { document.getElementById('tdbarra' + inti).style.width = '3px'; document.getElementById('tdbarra' + inti).style.backgroundColor = '#0000FF'; } for (inti = actualprogress + 1; inti <= 20; inti++) { document.getElementById('tdbarra' + inti).style.width = '3px'; document.getElementById('tdbarra' + inti).style.backgroundColor = '#B5CCFF'; } } </script> <asp:SqlDataSource ID="sqldsasuntos" ConnectionString="<%$ ConnectionStrings:Cresolia%>" EnableCaching="true" CacheKeyDependency="mantenimiento" SelectCommandType="StoredProcedure" SelectCommand="seleccionar_asuntos_correos" runat="server"> <SelectParameters> <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" /> </SelectParameters> </asp:SqlDataSource> <asp:SqlDataSource ID="sqldsclasesobras" ConnectionString="<%$ ConnectionStrings:Cresolia%>" EnableCaching="true" CacheKeyDependency="mantenimiento" SelectCommandType="StoredProcedure" SelectCommand="seleccionar_clases_obras" runat="server"> <SelectParameters> <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" /> </SelectParameters> </asp:SqlDataSource> <noscript> <meta http-equiv="refresh" content="0;url=../Comun/errores.aspx?error=javascriptdeshabilitado&pagina=cresolia&idioma=<%=Request.QueryString("idioma")%>"/> </noscript> </body> </html>
Cuando cambio el asunto a 1 compruebo si hay un fichero. Saca bien los errores JavaScript. Ahora cambio el asunto a 2, y no lo hace bien, no quita el trfichero, sino cuando cambio otra vez a una opción cualquera y luego a 2.
No hace bien el cambio de asunto cuando pasa por hacer_barra_progreso, cuando saca el trfichero. En los demás casos, cuando no está trfichero visible, lo hace bien.
No sé el motivo.
Me gustaría que me dijerais algo que veáis.
Muchísimas gracias.
- Marcado como respuesta Pablo RubioModerator viernes, 27 de diciembre de 2019 15:57
- Desmarcado como respuesta volar.2016 sábado, 28 de diciembre de 2019 10:42
- Editado volar.2016 sábado, 28 de diciembre de 2019 10:50