2010-05-04 13 views
8

Mit MVC2 habe ich ein einfaches ViewModel, das ein Bool-Feld enthält, das in der Ansicht als Kontrollkästchen gerendert wird. Ich möchte bestätigen, dass der Benutzer die Box überprüft hat. Das [Required] -Attribut auf meinem ViewModel scheint nicht den Trick zu machen. Ich glaube, dies liegt daran, dass das ungeprüfte Checkbox-Formularfeld während des POST nicht zurückgesendet wird und daher die Validierung nicht darauf ausgeführt wird.Wie würden Sie eine Checkbox in ASP.Net MVC 2 validieren?

Gibt es eine Standardmethode Checkbox zu handhaben „erforderlich“ Validierung in MVC2? Oder muss ich einen benutzerdefinierten Validator dafür schreiben? Ich vermute, dass der benutzerdefinierte Validator aus dem oben genannten Grund nicht ausgeführt wird. Störe ich in meinem Controller explizit darauf? Das scheint chaotisch ...

Jede Führung würde geschätzt.

Scott

EDIT FÜR CLARITY: Wie weiter unten in den Kommentaren darauf hingewiesen, ist dies ein „zu unseren Bedingungen einverstanden“ Art der Checkbox, und deshalb „nicht geprüft“ ist eine gültige Antwort, so dass ich mich wirklich für eine "ist überprüft" Validierung.

+1

Ist dies eine Art der Checkbox „Ich nehme die Bedingungen der Lizenzvereinbarung akzeptieren“? Das [Required] -Attribut funktioniert nicht, da ein nicht abgehaktes Kontrollkästchen ein gültiger Wert ist (false). –

+0

Ja, es ist genau das, und wenn sie es nicht überprüfen, zeigen wir dieselbe Ansicht mit einer Überprüfungsmeldung einfach wieder an, dass Sie die Bedingungen akzeptieren müssen, um fortzufahren. Ich sehe Ihren Punkt, dass falsches "gültig" ist. –

+0

Die Antwort hat eine schöne Art und Weise tun, die mit den Client-Validatoren funktionieren: [http://stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate](http:// stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate) –

Antwort

13

eine benutzerdefinierte Validator ist der Weg zu gehen. Ich werde meinen Code schreiben, die ich bestätigen verwendet, dass der Benutzer die Bedingungen akzeptiert ...

public class BooleanRequiredToBeTrueAttribute : RequiredAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     return value != null && (bool)value; 
    } 
} 
+0

Ist diese Validate Client-Seite als auch? – jrummell

+0

nicht automatisch, wie ich weiß. Um eine clientseitige Validierung zu erstellen, müssen Sie einen Validator für die benutzerdefinierte Validierung erstellen. siehe folgender Link für Details, wie dies umzusetzen: http://www.highoncoding.com/Articles/729_Creating_Custom_Client_Side_Validation_in_ASP_NET_MVC_2_0.aspx Sie haben eine DataAnnotationsModelValidator für die benutzerdefinierte Validierung erstellen – SQueek

0

auch ich nach einer Möglichkeit, überprüfen Sie die Sammelmappe Modell korrekt verarbeiten müssen Kisten mit Boolesche Werte. In der Zwischenzeit bin ich mit dieser in den Aktionen:

Object.Property = !String.IsNullOrEmpty(Request.Form["NAME"]); 

Vielleicht wird dies von einigen Sie sich mit Hilfe sein.

12

ich in der Regel verwenden:

[RegularExpression("true")] 
+2

ich dies mag, obwohl ich hatte zu zwicken Es ist dies: '[RegularExpression (" true | True ")]' um es für mich arbeiten zu lassen. (Ich benutze MVC3, wenn das einen Unterschied macht?) – Merenzo

+0

gab es Ihnen auch Client-Seite Validierung? Habe die Serverseite richtig verstanden – Shekhar

6

Wenn Sie nicht Ihre eigenen Validator wollte erstellen und noch vorhandene Attribute im Modell verwenden wollten Sie nutzen könnten:

[Range(typeof(bool), "true", "true", ErrorMessage="You must accept the terms and conditions.")] 

Dies stellt sicher, dass der Bereich des booleschen Wertes zwischen wahr und wahr liegt. Auch wenn diese Methode funktioniert, würde ich in diesem Szenario dennoch lieber einen benutzerdefinierten Validator verwenden. Ich dachte nur, ich würde dies als eine alternative Option erwähnen.

Verwandte Themen