2010-06-23 13 views
12

Ho un codice in cui ho bisogno di due validatori di campo obbligatori separati per un controllo, entrambi in gruppi di convalida separati che vengono poi convalidati da due pulsanti separati.Come posso disattivare il funzionamento del validatore di campo richiesto ASP.NET "lost focus"

Questo approccio funziona bene quando si fa clic sui pulsanti, ma entrambi i validatori mostrano se inserisco un valore nella casella di testo e quindi lo rimuovo.

C'è un modo per disattivare questa convalida di "smarrimento"? Ho solo bisogno di convalidare quando si fa clic sui pulsanti.

EDIT

Purtroppo, se ho impostato EnableClientScript = false allora non ho notifiche client. Quello che voglio è che il messaggio di errore dinamico mostri (efficacemente nell'evento OnClientClick del pulsante) ma non il "focus perso" della casella di testo.

C'è un modo per disabilitare o "sganciare" l'evento del client lostfocus?

EDIT

Una combinazione risposta di dDejan e answeer di womp here ordinati il ​​problema perfettamente.

Il mio codice finale si presenta così (per chiunque altro con una situazione simile) ...

Javascript ...

<script type="text/javascript"> 

    $(document).ready(function() { 
     $('body').fadeIn(500); 

     //Turn off all validation = its switched on dynamically 
     $.each(Page_Validators, function(index, validator) { 
       ValidatorEnable(validator, false); 
     }); 
    }); 

    function ToggleValidators(GroupName) { 

     $.each(Page_Validators, function(index, validator) { 
      if (validator.validationGroup == GroupName) { 

       ValidatorEnable(validator, true); 

      } else { 
       ValidatorEnable(validator, false); 
      } 
     }); 
    } 

</script> 

ASPX controllo Esempio ...

<telerik:RadTextBox Width="196px" ID="txtFirstName" runat="server" MaxLength="50" Skin="Black"></telerik:RadTextBox> 
<asp:RequiredFieldValidator ID="valFirstName" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForEmail"></asp:RequiredFieldValidator> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForSubmit"></asp:RequiredFieldValidator> 

Codice pulsante ASPX ...

<asp:Button ID="btnGetConfCode" runat="server" Text="Get Confirmation Code" OnClientClick="ToggleValidators('NeededForEmail')" OnClick="btnGetConfCode_Click" Width="100%" ValidationGroup="NeededForEmail"/> 

<asp:Button ID="btnRegisterUser" runat="server" Text="Register" OnClientClick="ToggleValidators('NeededForSubmit')" OnClick="btnRegisterUser_Click" Width="100px" ValidationGroup="NeededForSubmit" /> 

Quindi, ora non c'è alcuna convalida finché un utente non fa clic sul pulsante "Ottieni il codice di conferma via email" o sul pulsante "Registrati".

Se fanno clic sul pulsante "Ottieni il codice di conferma via e-mail", tutti i controlli vengono convalidati indipendentemente dalla casella di testo in cui l'utente deve inserire il codice di convalida dell'email e viene visualizzato solo un messaggio di convalida.

Se fanno clic sul pulsante "Registra", tutti i controlli vengono convalidati e viene visualizzato solo un messaggio di convalida.

Se uno dei due pulsanti viene premuto, l'utente torna indietro, aggiunge e quindi rimuove del testo, quindi viene visualizzato un solo validatore. Prima di questo cambiamento, si vedevano entrambi i messaggi che dicevano la stessa cosa.

Grazie per aiuto ragazzi

+0

So che questo potrebbe essere vecchio, ma una volta che il Validator è stato attivato onSubmit, come si fa a spegnerlo nuovamente sul fuoco, in modo che il messaggio di errore scompare fino a quando non viene fatto nuovamente clic sul pulsante di invio? – SollyM

risposta

5

È possibile impostare se i validatori sono "attivi" o meno con codice lato client utilizzando la funzione ValidatorEnable. In sostanza si va in questo modo

var validator = document.getElementById('<%=Validator1.ClientID%>'); 
ValidatorEnable(validator , state); //where state is boolean 

È inoltre possibile attivare il validatore per validare su alcuni eventi (come ad esempio il click dei pulsanti) utilizzando la funzione ValidatorValidate(validator).

Non sono sicuro che avrebbe funzionato meglio per voi (abilitazione/disabilitazione delle validatori o personalizzato scatenanti della convalida), ma vi suggerisco questo articolo che vi guiderà nella giusta direzione

ASP.NET Validation in Depth

+0

So che potrebbe essere vecchio ma una volta che il Validator è stato attivato su Invia, come lo si spegne nuovamente a fuoco, in modo che il messaggio di errore scompaia fino a quando non si fa nuovamente clic sul pulsante di invio? – SollyM

0

è possibile disattivare la convalida javascript impostando EnableClientScript = "false" che avrebbe sbarazzarsi della convalida attenzione perduta.

2

Non c'è modo di sganciarli se EnableClientScript = true.

Quello che potresti fare è impostarlo su false. Quindi creare un metodo di convalida javascript chiamato sull'evento onClientClick del pulsante di invio.

nel metodo, si dovrebbe chiamare ValidatorValidate (controllo) per ogni controllo che si desidera convalidare lato client

C'è un esempio qui:

http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside

0

È possibile utilizzare i controlli personalizzati Validator invece, o convalidare l'input utilizzando Javascript sul client o all'interno del gestore eventi sul server. Assicurati di impostare ValidateEmptyText = "true" sui controlli di convalida, altrimenti gli eventi non verranno attivati ​​su un campo vuoto.

0

Try per abilitare su entrambi i pulsanti fare clic su javascript e disattivarlo sull'evento di sfocatura della casella di testo.

0
var validator = document.getElementById('<%=Validator1.ClientID%>'); 
ValidatorEnable(validator , state); 

Si sta lavorando in javascript, ma quando si usa la funzione Page.IsValid sul lato server si crea il problema di controllare la pagina è valido o meno.

0

Provare a reimpostare l'evento onchange per il controllo input.

$(document).ready(function() { 
     $("#controlid").each(function() { this.onchange = null; }) 
    }); 
0

semplicemente digitare questo codice in page_load evento

textboxname.Attributes.Add("onblur","ValidatorOnChange(event);"); 
Problemi correlati