2010-03-31 13 views
36

Ich habe ein ASP.NET-Formular mit drei Texteingaben, je eine für "Work Phone", "Home Phone" und "Cell Phone". Jeder dieser Texteingaben ist ein RequiredFieldValidator zugeordnet. Ich habe auch eine DropDownList, wo der Benutzer den bevorzugten Telefontyp auswählen kann.Dynamische Aktivierung oder Deaktivierung von RequiredFieldValidator basierend auf dem Wert von DropDownList

Ich möchte nur das Feld, das in der DropDownList ausgewählt ist. Wenn der Benutzer z. B. "Arbeitsplatz" aus der DropDownList auswählt, möchte ich den RequiredFieldValidator für "Home Phone" und "Cell Phone" deaktivieren, wodurch nur das Feld "Work Phone" erforderlich wird.

Ich habe eine Methode, die diese Validatoren basierend auf dem Wert der DropDownList aktiviert und deaktiviert, aber ich kann nicht herausfinden, wann sie aufgerufen werden soll. Ich möchte, dass diese Methode ausgeführt wird, bevor die Validierung auf der Seite stattfindet. Wie würde ich das tun?

+0

Warum verwenden Sie in diesem Fall keinen CustomValidator? Das Ein-/Ausschalten eines RequiredFieldValidator könnte in Zukunft zu einem Design-Problem führen - ich würde mich darum bemühen, sie in Feldern zu verwenden, die benötigt werden. –

+0

Danke für den Vorschlag. Ich habe einen CustomValidator verwendet. Ich hatte sie vorher nicht benutzt, aber nachdem ich es eingerichtet hatte, war es viel mächtiger. Ich konnte leicht andere Validierungen hinzufügen. – Jeremy

+0

@Jason M: Wenn Sie den CustomValidator Vorschlag eine Antwort geben, werde ich es akzeptieren. – Jeremy

Antwort

11

Warum verwenden Sie in diesem Fall keinen CustomValidator? Das Ein-/Ausschalten eines RequiredFieldValidator könnte in Zukunft zu einem Design-Problem führen - ich würde mich darum bemühen, sie in Feldern zu verwenden, die benötigt werden.

+4

Ich stimme nicht zu. Ich sehe keinen Weg für Designprobleme in der Zukunft. Besonders in einfachen Situationen. –

+0

RequiredFieldValidator halten die Dinge in den meisten Situationen einfach. – etlds

+0

CustomValidator validiert keine leeren Felder –

0

OnChange der Dropdownlist, müssen Sie einen serverseitigen Ereignishandler registrieren, die aktiviert/deaktiviert den Validator ...

HTH

+0

Sprechen Sie über das OnSelectedIndexChanged-Ereignis der DropDownList? Ich habe dieses Ereignis eingerichtet, um die Methode aufzurufen, die die Validatoren aktiviert/deaktiviert, aber das Ereignis wird erst nach der Validierung ausgelöst. Zu diesem Zeitpunkt ist es zu spät. Ich muss es auslösen, bevor die Validierung erfolgt. – Jeremy

+0

Nein, er meint das Client-Ereignis "onchange" –

+0

Auf den zweiten Gedanken, würde ich zuerst den Bildschirm mit nur dem Dropdown für die Auswahl der Präferenz rendern. Wenn der Benutzer die Einstellung ausgewählt hat, rendern Sie ein Textfeld mit dem entsprechenden Validierungssteuerelement, anstatt alles auf dem Client auszuführen. – Sunny

39

Sie können dies wie folgt mit JavaScript tun:

ValidatorEnable(RequiredFieldValidatorId, false); 

haben dann Ihre Dropdown-Liste verwenden, um die onchange Ereignis (ich mit jQuery empfehlen würde)

$("#<%=dropDownList.ClientID %>").change(function(){ 
    var val = $(this).val(); 
    var skip = null; 
    if (val == 1) 
     skip = "workPhoneValidator"; 
    else if (val == 2) 
     skip = "cellPhoneValidator"; 
    .... 

    // by popular demand... 
    var $skip = $("#" + skip)[0]; 

    if (skip != "workPhoneValidator") ValidatorEnable($skip, false); 
    if (skip != "cellPhoneValidator") ValidatorEnable($skip, false); 
    .... 
}); 
+0

Haben Sie diesen Code ausprobiert? Sieht wie eine nette clientseitige Lösung aus. Ich wollte gerade eine serverseitige Lösung veröffentlichen, aber diese sieht aus, als ob sie Client-seitige Validatoren schaltet, oder? – citronas

+0

@citronas - ja, dies sollte die Validatoren Client-Seite ohne Postbacks wechseln – hunter

+0

Nizza! +1 dafür !! –

2

Möglicher Weg wäre:

  • Sets in Ihrem Dropdown AutoPostBack="true"
  • Im SelectedIndexChanged Ereignishandler der Dropdownlist aktivieren/Ihre Prüfungen deaktiviert
  • Legen Sie in Ihrer DropDownList CausesValidation="false" fest, um zu vermeiden, dass die Prüfer ein Postback blockieren, wenn Sie den DropDownList-Eintrag ändern.
+1

cursesvalidation perfekt! – Anicho

5

Wenn Sie das Telefon zu Hause verwenden, machen Sie im Dropdown-Menü selectedindexchange die erforderlichen Feldvalidatoren unsichtbar.

mögen ..

wenn Phone ausgewählt ist,

homephonevalidator.visible=true 
cellphonevalidator.visible=false 
workphonevalidator.visible=false 

wenn Mobiltelefon ausgewählt ist,

homephonevalidator.visible=false 
cellphonevalidator.visible=true 
workphonevalidator.visible=false 

wenn workphone ausgewählt ist,

homephonevalidator.visible=false 
cellphonevalidator.visible=false 
workphonevalidator.visible=true 
-1

Das ist eine gute Art und Weise zu aktivieren und zu deaktivieren Server-Seite Kontrollvalidierung von jquery-Ereignis:

<label class="label_radio" for="Oversize" onclick="EnableDisbledValidator('show')">show textbox</label> 

<asp:TextBox ID="txtNote" runat="server" class="checkvalidation"></asp:TextBox> 

<asp:RequiredFieldValidator ID="rfvNote" runat="server" ControlToValidate="txtNote" SetFocusOnError="true" ErrorMessage="Please enter the note" Display="Dynamic" CssClass="error-tooltip"></asp:RequiredFieldValidator> 

function EnableDisbledValidator(lblShow) { 
    if (lblShow == "hide") {; 
     ValidatorEnable($('#<%=rfvNote.ClientID %>')[0], false); 

    } else { 
     ValidatorEnable($('#<%=rfvNote.ClientID %>')[0], true); 
    } 
} 
Verwandte Themen