2011-11-17 7 views
5

Ya he visto muchas preguntas sobre esto, ¡pero estoy perplejo! ¡Por favor ayuda!El validador personalizado dispara pero no impide la devolución de datos

Tengo un evaluador personalizado. Está disparando pero no está impidiendo la devolución de datos. ¡Por favor, ayúdame a hacerlo! Puedo ver que console.log se registra antes de la publicación. Pero, publica de todos modos. ¿Cómo evito la devolución de datos?

He intentado agregar un control para validar y validar el texto vacío igual a verdadero. También he intentado añadir e.preventdefault, que no funcionaba :(

¿Cómo puedo evitar la devolución de datos?

<script type="text/javascript"> 
//<![CDATA[ 
function validateWhyUnlikely(source, args) { 
    console.log(1); 
    args.isValid = false; 
} 
//]]> 

<asp:TextBox ID="txtWhyUnlikely" runat="server" Rows="4" cols="20" 
      CssClass="surveyTextArea" /> 
<asp:CustomValidator runat="server" ID="cfvWhyUnlikley" ErrorMessage="Please provide a reason since you rated an item as unlikely to provide." 
     CssClass="surveyError surveySmallIndent" Display="Dynamic" 
     ClientValidationFunction="validateWhyUnlikely" /> 
<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="smallSpecial" OnClick="btnSubmit_Click" /> 


jQuery(document).ready(function() { 
    jQuery('#<%= btnSubmit.ClientID %>').click(function (e) { 
     if (Page.IsValid == false) { 
      console.log(false); 
      e.preventDefault(); 
      return false; 
     } 
    }); 
}); 

Respuesta

4

Todo se ve bien, aunque incluya No estoy seguro de por qué está adjuntando la función Click a su botón Enviar. Quitaría eso y lo probaría, ya que podría estar anulando el comportamiento predeterminado.

También creo que necesita capitalizar la propiedad IsValid:

args.IsValid = false; 
+0

Gracias ... Desearía compilar JavaScript! No hay errores, no vio este error de la carcasa @ Kelsey – Hoppe

3

yo también enfrentado a este problema, que estaba tratando de añadir un validador encargo a una lista desplegableque tenía un evento selectedIndexChange se le atribuye. Después de dar un valor incorrecto para el menú desplegable, pude ver el mensaje de error que di en Custom Validator, pero inmediatamente después de que se realizara la devolución de datos.

Sin embargo, al agregar esta propiedad CausesValidation="true" al control de lista desplegable resolvió mi problema.

La postback no ocurría en un valor incorrecto después de agregar esta propiedad a mi menú desplegable.

+1

Por favor, márquelo como respuesta si le sirve de ayuda. – Shalini

1

Experimenté este problema también.

Lo que hice fue, en el procedimiento en C# que fue llamado por el botón, en la parte superior añadí

if (IsValid == false) 
     return; 

No podía dejar que la realización de la devolución de datos por lo que este me pareció como la única solución.

0

Publicar esto, ya que podría ayudar a alguien que está teniendo el mismo comportamiento extraño.

Inicialmente tuve el mismo problema que este título de la publicación. Revisé todas las sugerencias aquí, pero mi código parecía estar bien.

Para solucionar esto reemplacé mi causa validación control <asp:Button.. con un <button... No estoy seguro de por qué sucede esto, pero estoy feliz de que esté funcionando ahora.

hth

1

Usted está misssing ControlToValidate="txtWhyUnlikely"

0

< etiquetas de botón se echa en falta la correcta código javascript para validar. < asp: El botón tiene el javascript correcto procesado.

He añadido esto a cualquier etiqueta de botón:

btn.Attributes("onclick") = StringFmt("if(!Page_ClientValidate(''))return false;") 

y que solucionó el problema posterior a la espalda. No se produce devolución posterior si el lado del cliente detecta un problema.

1

Si ayuda a otras personas, tuve un grupo de Validación al que me olvidé de agregar el botón.

Asegúrese de agregar el botón, el cuadro de texto y el validador al mismo grupo de validación para evitar la devolución.

0

He resuelto este problema mediante la creación de una variable:

Boolean fieldIsValid = true; 

y en la expresión de validación personalizada que cambiaría el valor si los argumentos no eran ciertas:

if(args.IsValid == false) 
      { 
       fieldIsValid = false; 
      } 
      else 
      { 
       fieldIsValid = true; 
      } 

Entonces, yo también puse que en el método de clic de envío:

protected void submit_Click(object sender, EventArgs e) 
     { 
      if (fieldIsValid) 
      { 
       //submit my things 
      } 
     } 
Cuestiones relacionadas