2009-06-24 6 views
20

Ich möchte das "<" Zeichen im Formularfeld von einem Regex-Validator abgefangen werden.ASP.NET MVC ValidateInput (false) stoppt die Arbeit mit xVal und [RegularExpression] DataAnnotation

Schritt 1: Ich werde das Problem in 3 Schritte beschreiben Wenn ich versuche, ein Formular mit einem Feld, das die „<“ Zeichen enthält einreichen, erhalte ich die „Potentiell gefährliche Anfrage ...“ - wie erwartet in ASP.NET.

Schritt 2: Um ASP.NET RequestValidation zu vermeiden, dekoriere ich meine Update-Methode im Controller mit "[ValidateInput (false)]".

Es funktioniert wie erwartet - jetzt kann ich "<" Zeichen ohne Fehler posten.

Schritt 3: Ich verwende xVal mit DataAnnotations. Zum Beispiel funktioniert [Erforderlich] oder [StringLänge (255)] wie erwartet.

ABER wenn ich benutze: [RegulaererAusdruck ("Sonderzeichen sind nicht erlaubt" "^ [^ <>] * $", Errormessage =)], Ich erhalte die „Potenziell dangeros Anfrage ... "Fehler wieder, trotz der [ValidateInput (false)] Direktive.

Was passiert? Gibt es einen einfacheren Weg für Regex-Validierung, aber mit [ValidateInput (false)] an Ort und Stelle? Natürlich hätte ich gerne meinen Validierungscode im Modell, nicht im Controller.

+2

Angesichts der Tatsache, dass der SO Community Bot dies an die Spitze geschoben hat, können Sie bestätigen, ob dies noch ein Problem ist? –

+2

Nein, es war eine Meldung in MVC 1 + xVal. In MVC 2 funktioniert die Validierung wie angenommen (und xVal ist nicht mehr notwendig). – Alex42

Antwort

0

Nein in ASPNET ist, es war ein Problem in MVC 1 + xVal. In MVC 2 die Validierung arbeitet als soll (und es gibt keine Notwendigkeit für xVal mehr) - Alex42

Sieht aus wie der Bot immer noch auf dem Druck dieses eine nach oben hält. Könnten Sie eine Antwort als akzeptiert markieren, damit sie es weiß?

0

Ich benutze xVal & nhibernate.validator und ich habe versucht, dieses Verhalten zu reproduzieren, aber weil der Validator in die Client-Seite gebunden ist, konnte ich keinen Wert nach der clientseitigen Validierung erhalten. Wenn ich JavaScript deaktivierte, kam es zur serverseitigen Validierung und wurde vom Validator für den regulären Ausdruck abgefangen.

Ich habe das gleiche mit der Verwendung der Daten Annotationen Validierung Attribute und Modell Binder und es auch vorbei gemacht.

Es muss etwas anderes passieren, das den Fehler verursacht. Entschuldigung, ich könnte nicht hilfsbereiter sein!

0

Versuchen Sie, eine einfache Regel mit this method zu validieren. Dies kann zumindest xVal aus der Gleichung eliminieren. Wenn das Problem weiterhin besteht, dann würde ich vorschlagen, es ist im Zusammenhang mit entweder:

  • der Implementierung von MVC-Standard Modell Binder
  • oder es gibt ein Problem mit dem MVC-Ansicht-Engine in der Release-Arbeiten mit dem das irgendwie eine Ausnahme ist erlaubt gemacht von Ihnen angegebenen für das Attribut werden, indem die < Validierung, wenn shoudn't es
0

sein, wenn es nur ein Feld, könnte man einfach eine Routine schreibt für ein Zeichen suchen ‚< oder>‘ und entfernen. Sie können dies erreichen, indem Sie Teilstring verwenden. hoffen, dass dies das

  • Verwendung For-Schleife Länge des Textes zu prüfenden (for (int i = 1, i = < text.length, ++))
  • überprüfen jedes Zeichen 1 begining (zB hilft ch = Text.substring (i, 1)
  • hinzufügen jedes Zeichen lesen String tmp außer '< oder>'
0

Ich nehme an, die statische Methode Escape() dies für Sie lösen würde.

Regex r = new Regex(Regex.Escape(expression)); 
0

diese Linie Put web.config in

<httpRuntime requestValidationMode="2.0" /> 

Diese Änderung 4,0