Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
asp.net mvc 3: Zugriff auf DataAnnotations
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

Themenstarter:

asp.net mvc 3: Zugriff auf DataAnnotations

beantworten | zitieren | melden

Hi,

es gibt ja die DataAnnotations wo Validierungs-Attribute angegeben werden können,
die dann z.b. von StronglyTyped Views bei asp.net mvc für den Aufbau der
Input-Felder und der Validierung verwendet werden..


...
Html.TextBoxFor(model => model.FieldName)
...

Kann man das auch "selber verwenden" bzw. wie?

Ich hab mir für mein Backend ein eigenes UI-Framework geschrieben,
mit dem ich die Formfields programmatisch und nicht in den Views
hinzufüge. Derzeit gebe ich "ID", "Name" und die Validierungen immer
in der jeweiligen "View-Klasse" manuell an. Es wäre aber perfekt
wenn ich hier ebenfalls die DataAnnotations verwenden könnte und
die manuelle Version nur für Sonderfälle verwenden bräuchte...

zur Zeit


PVField f1 = new PVField();
f1.Name = "Vorname";
f1.Id = "Firstname";
f1.Type = PVFieldType.Textbox;
f1.Value = model.Firstname;
f1.Validators.Add(new RequiredValidator() {ErrorMessage="muss angegeben werden" }
this.EditFields.Add(f1);

gewünscht


PVField f1 = new PVField(model => model.Firstname);
f1.Type = PVFieldType.Textbox;
this.EditFields.Add(f1);
private Nachricht | Beiträge des Benutzers
Sarc
myCSharp.de - Member



Dabei seit:
Beiträge: 426

beantworten | zitieren | melden

Wenn ich das richtig verstehe, willst du die Validierung der DataAnnotation manuell anstossen?!
Falls ja, dann ist diese Klasse etwas für dich:

System.ComponentModel.DataAnnotations.Validator
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

Themenstarter:

beantworten | zitieren | melden

Hi,

nein nicht unbedingt...

ich möchte der Klasse das Model bzw. das Property
übergeben (sow wie Html.TextboxFor...) und
damit dann darüber an die Werte kommen...

Id => Propertyname
Name => DataAnnotation
Validation => DataAnnotations
....
private Nachricht | Beiträge des Benutzers
Chris.B
myCSharp.de - Member



Dabei seit:
Beiträge: 25
Herkunft: Berlin

beantworten | zitieren | melden

Hi,

kurz vorweg, mit meinem Posting nehme ich nur Bezug auf:

PVField f1 = new PVField(model => model.Firstname);

Das was du in dem Fall übersiehst ist der HtmlHelper<TModel> im Hintergrund. Normalerweise würde man eine eigene Methode im Zusammenhang mit dem HtmlHelper wie folgt schreiben:


[Extension]
public void Foo<TModel, TResult>(this HtmlHelper<TModel> helper, this Expression<Func<TModel, TResult>> property)
{
    // ...
}

Bei einem Aufruf müssen TModel und TResult nicht explizit angegeben werden, da sie durch die typisierte HtmlHelper-Klasse implizit ermittelt werden können.

Anders jedoch ist es bei dem von dir beschriebenen, gewünschten, Szenario. Du hast keine Klasse aus der implizit TModel, bzw. darauf aufbauend TResult, ermittelt werden kann. Somit müsstest du die Klassen explizit angeben. Das sähe dann wie folgt aus:


public class Foo
{
    public Foo<TModel, TResult>(this Expression<Func<TModel, TResult>> property)
    {
        MemberExpression memberExpression = property.Body as MemberExpression;
        string propertyName = memberExpression.Member.Name;
        // ...
    }
}

// Aufruf
var foo = new Foo<MyObject, MyProperty>(model => model.MyProperty);

Damit könntest du dann direkt den Property-Namen bestimmen und via Reflection an die Attributes gelangen (http://msdn.microsoft.com/en-us/library/a4a92379.aspx).

Chris
private Nachricht | Beiträge des Benutzers