2011-11-17 11 views
5

Ho già ricevuto un sacco di domande su questo argomento, ma sono perplesso! Per favore aiuto!Il validatore personalizzato si attiva ma non impedisce il postback

Ho un customvalidator. Spara ma non impedisce il postback. Per favore aiutami a farlo! Posso vedere che console.log si registra prima del post. Ma torna comunque. Come posso impedire il postback?

Ho provato ad aggiungere un controllo per convalidare e convalidare il testo vuoto uguale a true. Ho anche provato ad aggiungere e.preventdefault, che non ha funzionato :(

Come posso evitare che il postback?

<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; 
     } 
    }); 
}); 

risposta

4

Tutto sembra ok ma decorate non sono sicuro perché sei allegando la funzione Click al pulsante di invio. Vorrei rimuoverlo e testarlo in quanto potrebbe sovrascrivere il comportamento predefinito.

Inoltre, penso che sia necessario capitalizzare la proprietà IsValid:

args.IsValid = false; 
+0

Grazie ... Vorrei che il codice JavaScript fosse compilato! Nessun errore, non ho visto questo errore di involucro @Kelsey – Hoppe

3

troppo ho affrontato questo problema, stavo cercando di aggiungere un validatore personalizzato ad un dropdownlist che ha avuto un evento selectedIndexChange collegato ad esso. Dopo aver dato un valore errato per il menu a discesa, sono riuscito a vedere il messaggio di errore che ho fornito in Custom Validator ma immediatamente dopo che era in corso il postback.

Tuttavia, l'aggiunta di questa proprietà CausesValidation="true" al controllo elenco di selezione ha risolto il problema.

Il postback non si è verificato in caso di valore errato dopo l'aggiunta di questa proprietà al mio menu a discesa.

+1

Contrassegnalo come risposta se ti aiuta. – Shalini

1

Ho riscontrato anche questo problema.

Quello che ho fatto è stato, nel procedimento C# che è stato chiamato dal pulsante, in cima ho aggiunto

if (IsValid == false) 
     return; 

non riuscivo a fermarlo eseguire il postback quindi questo mi sembrava l'unica soluzione.

0

Pubblicare questo come potrebbe aiutare qualcuno che sta ottenendo lo stesso comportamento strano.

Inizialmente avevo lo stesso problema di questo titolo del post. Ho controllato tutti i suggerimenti qui, ma il mio codice sembrava andare bene.

Per risolvere questo problema ho sostituito il controllo di convalida della causa <asp:Button.. con un <button... Non sono sicuro del motivo per cui ciò sta accadendo, ma è felice che funzioni ora.

hth

1

Stai misssing ControlToValidate="txtWhyUnlikely"

0

< tag pulsante mancano il corretto codice javascript per convalidare. < asp: il pulsante ha il javascript corretto visualizzato.

ho aggiunto questo per tutti i tag dei pulsanti:

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

e che risolto il problema post-indietro. Nessun postback si verifica se il lato client rileva un problema.

1

Se aiuta altre persone, ho avuto un gruppo di convalida a cui ho dimenticato di aggiungere il pulsante.

Assicurarsi di aggiungere il pulsante, la casella di testo e il validatore allo stesso gruppo di convalida per il postback da prevenire.

0

Ho risolto questo problema con la creazione di una variabile:

Boolean fieldIsValid = true; 

e l'espressione validazione personalizzata vorrei cambiare il valore se gli argomenti non erano vere:

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

Poi, ho anche messo che nel metodo di invio del messaggio:

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