1. Evento
Este es un problema que he ignorado o no he descubierto durante mucho tiempo. El problema es el siguiente:
En una página, cuando hay un control de validación, cuando el control Botón activa el evento OnClientClick y este evento devuelve verdadero y falso, el control de validación dejará de ser válido y ya no funcionará. La descripción específica es la siguiente:
La página .Net es la siguiente:
Copie el código de código de la siguiente manera:
<formulario id="form1" runat="servidor">
<asp:ScriptManager ID="ScriptManager1" runat="servidor">
</asp:ScriptManager>
<div>
<asp:TextBox ID="TextBoxTest" runat="servidor"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="servidor" ControlToValidate="TextBoxTest"
ErrorMessage="No puede estar vacío" Display="Ninguno"></asp:RequiredFieldValidator><ajaxToolkit:ValidatorCalloutExtender
ID="ValidatorCalloutExtender1" TargetControlID="RequiredFieldValidator1" runat="servidor">
</ajaxToolkit:ValidatorCalloutExtender>
<asp:Button ID="ButtonText" runat="server" Text="Prueba" OnClientClick="return confirm('¿Está seguro de que desea enviar?');"
</div>
</formulario>
Como se indicó anteriormente, agregue el control de validación RequireFieldValidator a la página para que el valor de TextBoxTest no pueda estar vacío. Cuando ButtonText envía la página, se le pide al usuario que confirme si es necesario enviarla. Es una página muy sencilla y parece no tener problemas. Pero cuando el valor de TextBoxTest está vacío, el control de validación no funciona y la página se envía correctamente. ¿Cuál es la razón de esto?
2. Responder a los eventos
¿Qué está sucediendo? Primero, después de que eliminé el evento OnClientClick de ButtonTest, el control de verificación funcionó. ¿Por qué es esto? Revisé el código fuente de la página y descubrí que el control ButtonTest genera el siguiente código fuente:
<input type="submit" name="ButtonText" value="Prueba" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(ButtonText, , true, , , false, false))" id="ButtonText" />
Como se puede ver en esta línea de código fuente, el control de validación genera un fragmento de código javascript en el lado del cliente para verificar si el valor en el cuadro de texto está vacío. Después de agregar OnClientClick de ButtonTest, revisé el código fuente. El código fuente generado por el control ButtonTest es el siguiente:
<input type="submit" name="ButtonText" value="Prueba" onclick="return confirm('¿Está seguro de que desea enviar?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(ButtonText, , true, , false, false )) " id="TextoBotón" />
A partir de esta línea de código, puede ver claramente dónde radica el problema. En el lado del cliente, primero se ejecuta el javascript personalizado y luego se ejecuta el javascript generado por el control de validación. Obviamente, en este caso, el control de validación pierde. cualquier significado.
3. Controles de respuesta
Una vez que sepas dónde está el problema, será más fácil de resolver. Mi solución es: antes de ejecutar el javascript personalizado (return confirm('¿Estás seguro de que quieres enviar?'), verifica si los controles de la página cumplen con lo establecido. reglas, así que modifiqué el evento OnClientClick de ButtonTest de la siguiente manera:
Copie el código de código de la siguiente manera:
<asp:Button ID="ButtonText" runat="server" Text="Test" OnClientClick="if(CheckClientValidate()) return Confirm('¿Está seguro de que desea enviar la página?');"
El código del método CheckClientValidate() es el siguiente:
Copie el código de código de la siguiente manera:
<script idioma="javascript" tipo="texto/javascript">
función CheckClientValidate(){
Page_ClientValidate();
si (Page_IsValid){
devolver verdadero;
}demás{
devolver falso;
}
}
</script>
Corre, prueba. Los controles de validación funcionan. Problema resuelto.
4. Posdata
Este es el problema y la solución que he sabido ignorar. Cuando descubrí este problema, comencé a sudar frío. Afortunadamente, hice una verificación estricta del lado del servidor; de lo contrario, sería miserable. Desde aquí también podemos ver lo necesario que es especificar una verificación estricta del lado del servidor :-). No solo evita que los "piratas informáticos" eludan la verificación del cliente, sino que también evita la inexactitud de los datos causada por errores que uno mismo no detecta.
Nota:
Page_ClientValidate(), esta función se utiliza en páginas aspx que contienen controles de validación de Microsoft para devolver Verdadero o Falso en función de si la operación de entrada del usuario es legal.
Se puede juzgar directamente.
Copie el código de código de la siguiente manera:
si(Page_ClientValidate())
{
devolver verdadero;
}
demás
{
devolver falso;
}