none
Comportamiento extraño tras un validationsummary RRS feed

  • 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
    lunes, 23 de diciembre de 2019 16:01

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

    lunes, 23 de diciembre de 2019 23:27

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

    lunes, 23 de diciembre de 2019 23:27
  • 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">&nbsp;</td><td id="tdbarra2">&nbsp;</td><td id="tdbarra3">&nbsp;</td><td id="tdbarra4">&nbsp;</td><td id="tdbarra5">&nbsp;
                                    </td><td id="tdbarra6">&nbsp;</td><td id="tdbarra7">&nbsp;</td><td id="tdbarra8">&nbsp;</td>
    	                            <td id="tdbarra9">&nbsp;</td><td id="tdbarra10">&nbsp;</td><td id="tdbarra11">&nbsp;</td><td id="tdbarra12">&nbsp;</td>
                                    <td id="tdbarra13">&nbsp;</td><td id="tdbarra14">&nbsp;</td><td id="tdbarra15">&nbsp;</td><td id="tdbarra16">&nbsp;</td><td id="tdbarra17">&nbsp;
                                    </td><td id="tdbarra18">&nbsp;</td><td id="tdbarra19">&nbsp;</td><td id="tdbarra20">&nbsp;</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 = '&nbsp;' + 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
    viernes, 27 de diciembre de 2019 11:53