route - ¿Cómo verificar un control de validación de asp.net particular es válido?
select asp-for asp-items (5)
Puede hacer esto configurando ValidationGroup para el control de Validator que desea tratar como separado de los demás. Asegúrese de que coincida con ValidationGroup del control que está validando (su campo de nombre de usuario).
En un formulario web, existen diferentes controles de validación asp.net. ¿Es posible verificar que un control de validación en particular sea válido? Por ejemplo, al dejar el foco del cuadro de texto, primero comprobaré requiredFieldValidatorUserName es válido? Si es válido, verificaré en el servidor utilizando ajax que este nombre de usuario ya no está reservado.
Editar:
Explicación: deseo verificar la validez (esa entrada era válida) de un control de validación en el lado del cliente.
Por favor guía.
Todos los controles del validador implementan IValidator que contiene la propiedad IsValid.
myValidatorControl.IsValid
La mejor manera sería usar un CustomValidator
con código del lado del cliente, ya que mostrará todos los mensajes de error, bloqueará el envío de formularios y también garantizará que la validación se repita en el servidor. Recuerde, solo porque tiene validación del lado del cliente disponible. , no significa que el usuario lo haya visto: siempre valide su entrada en el servidor también .
Su CustomValidator
se codificaría para llamar a los métodos de Ajax y mostraría los mensajes de error correctamente al cliente:
<asp:Label ID="UserNameLabel" AssociatedControlID="UserName" runat="server">
UserName *:</asp:Label>
<asp:TextBox ID="UserName" runat="server" />
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server"
ControlToValidate="UserName" EnableClientScript="true"
ErrorMessage="You must supply a username!" />
<asp:CustomValidator ID="UserNameCustom" runat="server"
ControlToValidate="UserName"
ClientValidationFunction="CheckExisting"
OnServerValidate="UserNameCustomValidate"
ErrorMessage="Username already taken" />
Y su ClientValidationFunction debe verse más o menos así:
<script type="text/javascript">
function CheckExisting(source, arguments) {
// Pass the arguments.Value to your AJAX call:
if (ajaxCallUserNameTaken(arguments.Value)) {
arguments.IsValid = false;
}
}
</script>
(Obviamente, tendrá que escribir el método ajaxCallUserNameTaken para llamar a su método de página / servicio web / etc.)
Hacerlo de esta manera asegurará que los métodos de validación se produzcan como se espera; se llamará cuando el usuario salga del cuadro de texto dejando un valor (no se llamará si el cuadro de texto está vacío) y se asegurará de que el usuario no pueda enviar la página hasta que proporcione un valor único. También querrá crear el método al que se hace referencia en OnServerValidate
para asegurarse de que el valor sea bueno una vez que OnServerValidate
al servidor también; esto debería llamar al mismo código que el punto final AJAX para reducir la duplicación de código, etc.
Originalmente iba a sugerir que pudieras usar el objeto Page_Validators
en el lado del cliente para verificar el evento onBlur
, pero realmente no creo que sea adecuado aquí ya que resulta en más dolor:
- Asume que, aunque puede haber más de un validador en la página, solo está RequiredFieldValidator en el control que estamos verificando
- RequiredFieldValidator no se
OnBlur
duranteOnBlur
si un usuario sale de un control sin establecer un valor, solo si establece y borra el valor, por lo que incluso siisvalid
estrue
, debe verificar si hay una cadena vacía.
Acabo de enfrentar el mismo problema y establecí CausesValidation="true"
en el control del cuadro de texto y funcionó. Solo pruébalo :)
Estuve dando vueltas con esto un poco y encontré una solución bastante fácil (no tan eficiente) para manejar esto usando jQuery.
Use esta función para verificar la validez de su control:
function validateControl() {
return $(''#YOUR_VALIDATOR_ID'').css("visibility") == "visible"
si está usando Display="Dynamic"
en su validador, entonces la función es así:
function validateControl() {
return return $(''#YOUR_VALIDATOR_ID'').css("display") == "inline"
Asegúrese de verificar la verdadera ID de su validador si está utilizando una página maestra, ya que será diferente a la de su IDE. Hazlo al ver el origen de la página en tu navegador.
La mejor solución será, por supuesto, validar su formulario de alguna otra forma, utilizando JavaScript o un Custom Valuator que le permita escribir su propio código.