2011-06-20 13 views
5

Tengo un botón de envío no estándar en mi formulario ASP.NET en la línea de.invocar validador de campo a través de javascript

<a class="button" href="#" onclick="this.blur();SubmitForm();"><span>Submit</span></a> 

Debido a esto, mi validador de campo requerido no se invoca en el lado del cliente. ¿Cómo se puede invocar el validador de campo requerido a través de Javascript?

¿Existe alguna otra manera mejor de lograr lo que estoy intentando hacer?

Respuesta

9

Se puede utilizar en la función de cliente incorporado llamado Page_ClientValidate de Check-Out hasta el siguiente fragmento de código para la referencia

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ClientSide_Validation.aspx.cs" 
    Inherits="ClientSide_Validation" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function performCheck() { 

      if (Page_ClientValidate()) { 
      } 

     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="lbl1" runat="server" Text="Please enter some value"></asp:Label> 
     <asp:TextBox ID="txtbox1" runat="server"></asp:TextBox> 
     <asp:RequiredFieldValidator ID="valReq" ControlToValidate="txtbox1" runat="server" 
      ErrorMessage="*" Display="Dynamic"> 
     </asp:RequiredFieldValidator> 
     <input type="button" id="btnValidate" value="Submit" onclick="performCheck()" /> 
     <a href="#" onclick="performCheck();">Validate</a> 
    </div> 
    </form> 
</body> 
</html> 
+0

Esto creará un problema cuando tenga varios grupos de validación en la misma página. – rahularyansharma

+0

http://stackoverflow.com/a/11548526/779158 encontró aquí un problema de respuesta para el grupo de validación. – rahularyansharma

3

Eche un vistazo a client side api for ASP.Net validators. Todos los validadores en la página están expuestos en un Array a través del Page_Validators. Puede llamar al ValidatorValidate(validator) en un solo validador para invocarlo. Por lo tanto, para invocar todos los validadores en la página que podía:

Page_Validators.forEach(ValidatorValidate); 

Por cierto, para utilizar en navegadores antiguos Array.forEachyou'll need to extend Array.

7

Page_ClientValidate desencadena la validación de todos los validadores sobre la forma y como @ gilly3 muestra cabo puedas también validarlos todos haciendo un bucle en la colección y llamando al ValidatorValidate(validator)

Sin embargo, si desea validar solo un validador en particular, debe llamar al ValidatorValidate(validator) para un solo artículo.

El argumento del validador debe ser un objeto DOM que puede ser difícil de obtener porque la ID del elemento puede terminar siendo bastante diferente de la especificada en la marca si está utilizando páginas maestras o controles de usuario.

p. Ej.

<asp:RequiredFieldValidator ID="rfvCampaignStartDate" runat="server" .../> 

convierte

<span id="cph_0_rfvCampaignFile" ...> 

llegué alrededor de esto en uno de mis proyectos mediante el uso de un selector de jQuery como esto

ValidatorValidate($('[id$="rfvCampaignFile"]').get(0)); 

ASP.NET prefijos sólo los identificadores para crear un nombre único Podría usar id$= parte del selector para que coincida con cualquier ID que termine en "rfvCampaignFile" ya que escribí el sitio web, sé que no entrará en conflicto con otros controles. Finalmente utilizo .get(0) para devolver la referencia del objeto DOM al primer objeto DOM (y solo en mi caso) coincidente.

1

Si está utilizando jQuery a continuación, establecer un control de ASP.NET ClientIDMode = "estático" y puede hacer que su código sea más fácil de leer ...

ValidatorValidate ($ ('# MyControl'));

o algo muy similar.

Cuestiones relacionadas