2012-03-26 1 views
2

Ich habe eine Optionsschaltfläche mit den Werten "Ja" und "Nein". Wenn der Benutzer "Ja" auswählt, wird das Textfeld nach unten verschoben. Also muss es validiert werden. Wenn der Benutzer auf "Nein" klickt, wird die Textbox nach oben verschoben und es ist keine Validierung erforderlich.Wie validiere ich ein Textfeld basierend auf Auswahlknopf in ASP.NET MVC 3 und JQuery?

Ich habe versucht zu verwenden, ValidationMessageFor (Modell => Model.TextBoxValue), aber ich bin nicht in der Lage, das Formular als zu senden, validiert das Textfeld, auch wenn es gerutscht ist.

Antwort

1

Die "JQuery.Validate" Bibliothek könnte sei eine vernünftige Lösung. Dadurch können Sie Ihr Feld basierend auf bestimmten Bedingungen validieren. Syntax ist ziemlich ausdrucksvoll:

$("#SomeFormId form").validate({ 
       rules: { 
        "YourTextBoxId": { 
         required: { 
          depends: function(element) { 
           return $("#YourCheckBoxId").is(":checked"); 
          } 
         } 
        } 

// Writing this is notepad, you'll have to look up the syntax if you choose this approach. 
0

Fügen Sie ein verstecktes Feld hinzu, das die Anzeige der Textbox verfolgt oder nicht. Überprüfen Sie das Feld vor der Validierung.

Sie können sogar Javascript verwenden, um zu sehen, ob die textbox.style.display == 'versteckt' ist, und führen Sie die Validierungsfunktion aus.

Hoffe, das hilft.

+0

Können Sie bitte ein bisschen mehr erklären, mit etwas Code. Es wird sehr hilfreich sein. –

+1

Wenn Sie etwas von Ihrem Code veröffentlichen können, kann ich Ihnen auch einfacher helfen. Wenn Ihre Validierungsfunktion auch in JavaScript ausgeführt wird, können Sie vor einem serverseitigen Aufruf zwei JavaScript-Funktionen ausführen. Etwas wie onclick = "function1(); function2();" function2 wird nicht ausgeführt, wenn function1 false zurückgibt. Überprüfen Sie in function1, ob Ihr Textfeld angezeigt wird: textbox.style.visibility oder textbox.style.display. Wenn es sichtbar ist, validiere in Funktion2. Hoffe, das ist jetzt klarer. Ich würde auch eine Abstimmung begrüßen, wenn es hilfreich ist. Bitte poste mehr Code, damit ich helfen kann. – c0d3Junk13

0

Ich nehme an, Sie verwenden jquery, um die textbox nach oben und unten schieben. Eine andere Methode wäre, das disabled-Attribut des textbox mit jQuery zu wechseln, wenn Sie es nach oben oder unten schieben. Deaktivierte Elemente werden nicht an den Server gesendet.

edit: ich direkt nach oder unmittelbar vor dem Code zum Verschieben der textbox heraus sagen würde, dann würden Sie verwenden, dass textbox in irgendeiner Weise so etwas wie die folgenden

<<when showing the textbox 
$("#textbox-id").attr('disabled', false); 

<<when hiding the textbox 
$("#textbox-id").attr('disabled', true); 

Dies deaktiviert den Benutzer tun einschließlich des Sendens an den Server, damit der Server keine Werte sehen kann, die möglicherweise darin enthalten sind.

edit2: Nur daran gedacht, dass Sie auch den Wert der checkbox überprüfen müssen, wenn das Formular übermittelt wird. Wenn es überprüft wird, überprüfen Sie die textbox, wenn nicht, dann nicht.

+0

Ich bin neu in JQuery. Ich kenne nur die Slidup- und Slide-Down-Funktion in JQuery UI. Können Sie einen Link oder einen Code posten, um zu sehen, wie "deaktiviert" funktioniert? –

+0

Ich habe meine Antwort mit etwas Code bearbeitet. Sie müssten den Textbox-ID-Teil auf die ID Ihrer Textbox ändern.Dies würde direkt mit dem anderen Code verbunden sein, der ausgeführt wird, wenn die "Textbox" ein- oder ausgleitet. – sparrow

0

Soweit ich verstanden habe, möchten Sie den Status eines Radio Button überprüfen, dementsprechend ein Textfeld anzeigen/verbergen. Wenn es angezeigt wird, muss es überprüft werden, wenn es ausgeblendet ist, ist keine Validierung erforderlich.

Ich würde vorschlagen, Validierung zur Renderzeit zu aktivieren. Jetzt auf Auswahl basiert, Sie zeigen/verstecken Textbox, ill den folgenden Code setzen in $ (document) .ready()

 
    // select the radio button 
    var radioBtn = $('#radioBtn1'); 
    var initialState = radioBtn.is(':checked'); 

    // hide/show 
    var textbox = $('#txtBox1')[initialState ? 'show' : 'hide'](); 

    // Show/hide based on radio button selection 
    radioBtn.click(function() { 
     textbox[initialState ? 'show' : 'hide'](); 
    }); 
} 

hoffe, das hilft, Grüße