2010-06-23 2 views
12

Ich habe einige Code, wo ich zwei separate erforderliche Feldgültigkeiten für ein Steuerelement, beide in separaten Validierungsgruppen, die dann durch zwei separate Schaltflächen validiert sind.Wie kann ich ASP.NET erforderlichen Feld validator "verlorenes Fokus" Verhalten deaktivieren

Dieser Ansatz funktioniert gut, wenn auf die Schaltflächen geklickt wird, aber beide Validatoren zeigen, wenn ich einen Wert in das Textfeld einfüge und ihn dann entferne.

Gibt es eine Möglichkeit, diese Validierung des "verlorenen Fokus" zu deaktivieren? Ich brauche es nur zu validieren, wenn auf die Schaltflächen geklickt wird.

EDIT

Leider, wenn ich EnableClientScript gesetzt = false dann nicht, daß ich keine Client-Benachrichtigungen haben. Ich möchte, dass die dynamische Fehlermeldung (effektiv im OnClientClick-Ereignis der Schaltfläche) angezeigt wird, nicht aber der "verlorene Fokus" der Textbox.

Gibt es eine Möglichkeit, das lostfocus-Client-Event zu deaktivieren oder zu "aushängen"?

EDIT

Eine Kombination dDejan Antwort und answeer des womp here das Problem perfekt sortiert.

Mein letzter Code sieht wie folgt aus (für alle anderen mit einer ähnlichen Situation) ...

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 Kontrollbeispiel ...

<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> 

ASPX-Tastencode ...

<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" /> 

Nun gibt es keine Validierung, bis ein Benutzer entweder auf die Schaltfläche "E-Mail-Bestätigungscode abrufen" oder auf die Schaltfläche "Registrieren" klickt.

Wenn sie auf die Schaltfläche "E-Mail-Bestätigungscode abrufen" klicken, werden alle Steuerelemente außer dem Textfeld validiert, in dem der Benutzer den E-Mail-Validierungscode eingeben muss.

Wenn sie auf die Schaltfläche "Registrieren" klicken, werden alle Steuerelemente validiert und es wird nur eine Validierungsnachricht angezeigt.

Wenn eine der beiden Tasten gedrückt wird, geht der Benutzer zurück, fügt hinzu und entfernt dann etwas Text, dann sehen wir nur noch einen Validator. Vor dieser Änderung haben Sie immer beide Nachrichten gesehen, die dasselbe sagten.

Vielen Dank für die Hilfe Jungs

+0

Ich weiß, das alt sein könnte, aber sobald der Validator onSubmit aktiviert wurde, wie man es wieder schalte auf Fokus, so dass die Fehlermeldung verschwindet, bis der Absenden-Button erneut angeklickt wird? – SollyM

Antwort

5

Mit der Funktion ValidatorEnable können Sie festlegen, ob die Prüfer mit dem clientseitigen Code "aktiv" sind oder nicht. Im Grunde geht es so

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

Sie auch den Validator auslösen kann auf ein Ereignis bestätigen (wie zum Beispiel das Klicken der Tasten) mit der ValidatorValidate(validator) Funktion.

Ich bin nicht sicher, ob das für Sie besser funktionieren würde (Aktivierung/Deaktivierung der Validierer oder Brauch der Validierung auslösenden), aber ich schlage vor, diesen Artikel, die Sie in die richtige Richtung

ASP.NET Validation in Depth

+0

Ich weiß, dass dies alt sein könnte, aber sobald der Validator onSubmit aktiviert wurde, wie schalte ich ihn im Fokus wieder aus, so dass die Fehlermeldung verschwindet, bis der Submit-Button erneut geklickt wird? – SollyM

0

Sie können die JavaScript-Validierung, indem EnableClientScript = „false“ deaktivieren, die der verlorenen Fokus Validierung loswerden würde.

2

Es gibt keine Möglichkeit, sie zu entfernen, wenn EnableClientScript = true ist.

Sie könnten es auf false setzen. Erstellen Sie anschließend eine JavaScript-Validierungsmethode, die für das onClientClick-Ereignis "submit-button" aufgerufen wird.

In Ihrer Methode, würden Sie haben ValidatorValidate (Kontrolle) für jede Steuer Sie Client-Seite

Es gibt hier ein Beispiel zur Validierung anrufen mögen:

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

0

Sie benutzerdefinierte Validator-Steuerelemente verwenden können Stattdessen validieren Sie die Eingabe entweder mithilfe von JavaScript auf dem Client oder im Ereignishandler auf dem Server. Stellen Sie sicher, dass Sie ValidateEmptyText = "true" für die Validierungssteuerelemente festlegen, andernfalls werden die Ereignisse nicht auf einem leeren Feld ausgelöst.

0

Versuch leiten wird Aktivieren Sie beide Schaltflächen klicken Sie mit Javascript und deaktivieren Sie es bei Textfeld Unschärfe-Ereignis.

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

Es ist in Javascript arbeiten, aber wenn wir die Page.IsValid Funktion auf Server-Seite verwenden, schafft es das Problem Seite zu überprüfen, gültig ist oder nicht.

0

Versuchen Sie, das onchange-Ereignis für die Eingabesteuerung zurückzusetzen.

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

geben Sie einfach diesen Code in page_load Ereignis

textboxname.Attributes.Add("onblur","ValidatorOnChange(event);"); 
Verwandte Themen