Benutzerdefinierte Validierung Attribut Mehrere Male auf dem gleichen Feld
Wie kann ich das verwenden Derselben Benutzerdefinierten Validierung Attribut Mehrere Male auf Demselben Feld oder einfach nur aktivieren, AllowMultiple=true, sowohl server-Seite und client-seitige Validierung??
Ich habe folgende Benutzerdefinierte Validierung Attribut:
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property,
AllowMultiple = true, Inherited = true)]
public class RequiredIfAttribute : ValidationAttribute,IClientValidatable
{
public RequiredIfAttribute(string dependentProperties,
string dependentValues = "",
string requiredValue = "val")
{
}
}
Wo in dependentProperties kann ich das angeben mehrerer abhängiger Eigenschaften, getrennt durch Komma, in dependentValues ich kann angeben, für welche Werte von abhängigen Eigenschaften sollte die Validierung Prozess und schließlich in requiredValue kann ich angeben, zu erwartenden Wert für das Feld validiert werden.
In meinem Modell gibt es zwei Eigenschaften, Wahrzeichen, PinCode und ich will die Validierung wie folgt:
public string LandMark { get; set; }
[RequiredIf("LandMark","XYZ","500500")]
[RequiredIf("LandMark", "ABC", "500505")]
public string PinCode { get; set; }
Die Werte hier sind nur ein Beispiel, wie pro es scheint, ich kann das Attribut hinzufügen mehrere Male und bekomme keine compile-Fehler, implementierte ich TypeID-Attribut, und es funktioniert gut aus serverside, wenn ich entfernen Sie client-Validierung aus. Aber wenn ich die Umsetzung IClientValidatable auf das Attribut, es gibt mir eine Fehlermeldung:
"Validierung geben Sie Namen in dezentem client-Validierung müssen die Regeln eindeutig sein."
Jede Hilfe, wie kann ich es lösen??
- mit welchem problem sind Sie in Betrieb?
- Ich habe den genauen Bedarf und ich kann nicht vermeiden Sie die Verwendung der benutzerdefinierten Attribut mehrere Male auf dem gleichen Feld, mein benutzerdefiniertes Attribut implementiert IClientValidatable, ich habe ermöglichen, AllowMultiple=true für das Attribut an.. nun wenn ich das Attribut mehrere Male, die ich erhalten den Fehler " ValidationType-name ist in dezentem Validierung muss eindeutig sein....
- Bitte aktualisieren Sie Ihre Frage, vielleicht auch code hinzufügen, der Ihre Attribut-und eine Erklärung, wie orhers replizieren könnte Ihr Problem
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich hier fand ich die Antwort selbst.
Schauen Sie auf folgenden Artikel für Lösung
http://www.codeproject.com/KB/validation/MultipleDataAnnotations.aspx
Das Problem
Validierung Attribute haben zwei Umgebungen können Sie überprüfen gegen:
Server-Validierung - Mehrere Attribute Einfach
Wenn Sie keine attribute mit:
Haben und legen Sie es auf Ihrem class-Eigenschaft wie folgt:
Dann jederzeit die Server geht validieren Sie ein Objekt (ex.
ModelState.IsValid
es prüfen jedesValidationAttribute
auf jede Eigenschaft, und rufen Sie.IsValid()
Gültigkeit bestimmen. Dies funktioniert gut, auch wennAttributeUsage.AllowMultiple
auf true gesetzt ist.Client-Validierung - HTML-Attribut Engpass
Beim aktivieren der client-Seite durch die Umsetzung
IClientValidatable
wie diese:Dann ASP.NET emittiert wird der folgende HTML-Code generiert, wenn:
(solange
ClientValidationEnabled
&UnobtrusiveJavaScriptEnabled
sind aktiviert)Data-Attribute sind das einzige Fahrzeug haben wir für dumping-Regeln in die client-seitige Validierung engine, die Suche nach beliebigen Attributen auf der Seite über eine integrierte oder benutzerdefinierte adapter. Und einmal ein Teil der Reihe von client-seitige Regeln, es werden in der Lage, um zu bestimmen, die Gültigkeit eines jeden analysiert-in der Regel mit einer integrierten oder benutzerdefinierten Methode.
Also wir können hoch jQuery Validierung Unauffällig zu schauen und zu analysieren, diese Attribute durch hinzufügen einer benutzerdefinierten adapter die eine Gültigkeitsregel zum Motor:
Dann können wir sagen, dass die Regel wie die Funktion, und bestimmen Sie die Gültigkeit, indem Sie hinzufügen einer benutzerdefinierten Methode wie diese, die wird hinzufügen einer benutzerdefinierten Art und Weise zu bewerten
requiredif
Regeln (im Gegensatz zum Datum-Regeln oder-regex-Regeln), die sich auf die Parameter, die wir früher geladenen, die über den adapter:Denen alles funktioniert wie dies:
Lösung
So, was haben wir gelernt? Nun, wenn wir wollen, dass die gleiche Regel erscheinen mehrmals auf das gleiche element, der adapter würde um die genauen Regeln mehrere Male pro element, ohne die Möglichkeit zu differenzieren, zwischen jeder Instanz in mehrere sets. Weiter, ASP.NET nicht machen die gleichen Attribut-Namen mehrere Male, denn es ist kein Gültiger html-Code.
Also, wir müssen entweder:
Werde ich untersuchen Option Einer (aussenden eines einzigen client-Seite-Attribut), was könnten Sie tun, ein paar Möglichkeiten:
In beiden Fällen werden Sie müssen re-schreiben Sie die client-seitige Logik (adapter/- Methode), um ein array von Werten anstelle eines einzelnen Wertes zu einem Zeitpunkt.
Zu werden wir erstellen/übertragen einer JSON-serialisiertes Objekt, das aussieht wie dieses:
Scripts/ValidateRequiredIfAny.js
Hier ist, wie wir damit umgehen, dass in client-side-adapter /- Methode:
Models/RequiredIfAttribute.cs
Auf der server-Seite werden wir überprüfen Attribute wie normal, aber wenn wir zu bauen die client-Seite Attribute, schauen wir für alle Attribute und bauen eine mega-Attribut
Dann können wir binden, dass an unserem Modell durch die Anwendung mehrerer Attribute gleichzeitig:
Weiter Lesen