2008-11-04 15 views
10

Tengo un problema con una página ASP.NET estándar que tiene un TextBox y RequiredFieldValidator. Los pasos para reproducir son muy simples:Validador de campo obligatorio que no se activa

  1. Coloque un cuadro de texto en una página
  2. Coloque un RequiredFieldValidator en la página
  3. Punto RequiredFieldValidator en el cuadro de texto
  4. Ejecutar la aplicación
  5. Tab lejos de el TextBox el RequiredFieldValidator no muestra
  6. Ingrese el texto, luego elimine el texto y ENTONCES la pestaña, el RequiredFieldValidator muestra

RequiredFieldValidator funciona bien en ambos casos después de una devolución de datos, sin embargo, parece que el código del lado del cliente no se activa hasta que se ingresa algo en el cuadro de texto (y luego se elimina).

¿Alguien tiene una solución para esto sin hackear yo mismo JavaScript?

Respuesta

4

¿Es posible que este comportamiento elimine la apariencia de los controles de validación hasta que el usuario lo ingrese?

En general, se llama a Validate() cada vez que se hace clic en un control que tiene CausesValidation establecido en verdadero, como un botón de envío.

En cualquier caso, un hombre pobre trabaja, usted podría llamar a la función de validación de la página() desde el controlador de eventos Load. Esto hará las cosas más claras para los usuarios satisfechos de las pestañas que necesitan ingresar algo. Por ejemplo, E.g.

protected void Page_Load(object sender, EventArgs e) 
{ 
    Validate(); 
} 
+0

No creo que esto sea por diseño. El usuario ha resaltado el TextBox y ha alejado el foco de él. Se les informará que es incorrecto después de hacer clic en el botón de enviar, sin embargo, se les debe informar de inmediato. –

+0

Llamar a Page.Validate() es una opción, sin embargo, creo que esto es menos conveniente ya que significa que la página parecerá automáticamente "no válida" para el usuario. –

+0

Me parece que todos los validadores funcionan de esta manera. Si crees que es un error en el marco, tal vez podrías considerar abrir un error de Microsoft Connect. –

2

¿Ha establecido el atributo/propiedad EnableClientScript en verdadero? ¿tiene un valor predeterminado para el cuadro de texto? si es así, debe establecer la propiedad InitialValue en ese valor predeterminado

+0

EnableClientScript es verdadero. No hay un valor predeterminado y InitialValue definitivamente no es nada. Me gustaría que alguien más cree una página en blanco y pruebe esto para ver si obtienen el mismo resultado que yo. –

0

Un formulario puede contener varios grupos de validación. La validación AFAIK solo se activa a través de una devolución posterior, activando los validadores del grupo validador correspondiente. Solo después de la devolución posterior, el validador agrega su código de validación de JavaScript del lado del cliente.

+1

Si ingreso texto, lo elimino y luego elimino la pestaña, el código de validación de JavaScript del lado del cliente se dispara correctamente y me advierte. Además, la mayoría de los otros validadores funcionan bien y activan correctamente su código de validación del lado del cliente. –

0

Así es como funcionan los validadores, no se activan a menos que haya una entrada para validar o haya una devolución de datos. Tendrás que hacer la validación para dispararte si quieres que suceda.

no sé el código exacto que necesita pero va a tener que ver con el manejo y onBlur primordial función de evaluación:

function blurred(sender) { 
    var validator = sender.Validators[0] 
    validator.evaluationfunction(validator); 
} 

y en el cuadro de texto:

<asp:TextBox runat="server" ID="txt" onBlur="blurred(this)"></asp:TextBox> 
+0

Gracias Sontek. No creo que el JavaScript sea demasiado difícil de agregar (como mostraste allí), pero solo quería comprobar si había alguna alternativa antes de ir por esa ruta :) –

+0

no tienes que hacer esto para obtener el lado del cliente validación en el cuadro de texto –

3

Puede estar creando un problema de usabilidad aquí. Si valida campos obligatorios en desenfoque, el usuario obtendrá una gran cantidad de errores de "Campo obligatorio" solo porque está tabulando a través de los campos.

4

Un seguimiento a mi respuesta anterior:

validación se produce en el evento onchange, en lugar de la onBlur. el cambio se dispara cuando se pierde el foco Y el valor de control ha cambiado.

para activar la validación en caso onBlur, he añadido el código siguiente en el Page_Load():

ScriptManager.RegisterStartupScript(this, GetType(), "js" + myTextBox.ClientID, 
    "ValidatorHookupEvent(document.getElementById(\"" + myTextBox.ClientID + 
    "\"), \"onblur\", \"ValidatorOnChange(event);\");", true); 

Obras en ASP.Net 2.

0

que tenían el mismo problema. Descubrió que necesita agregar algunas referencias de script de marco a su administrador de scripts. Asegúrese de tener al menos estas referencias de script con las etiquetas "script" en su administrador de scripts.

<asp:ScriptManager ID="ScriptManager1" runat="server" ValidateRequestMode="Enabled" > 
     <Scripts> 
     <%--Framework Scripts--%> 
     <%--<asp:ScriptReference Name="MsAjaxBundle" />--%> 
     <asp:ScriptReference Name="jquery" /> 
     <asp:ScriptReference Name="jquery.ui.combined" /> 
     <asp:ScriptReference Name="WebForms.js" Path="~/Scripts/WebForms/WebForms.js" /> 
     <asp:ScriptReference Name="WebUIValidation.js" Path="~/Scripts/WebForms/WebUIValidation.js" /> 
     <asp:ScriptReference Name="WebFormsBundle" /> 
     <%--Site Scripts--%> 

    </Scripts> 
    </asp:ScriptManager> 

Puede encontrarlos también en la página maestra predeterminada creada por .Net cuando crea una aplicación de formularios web.

Cuestiones relacionadas