[ASP.NET MVC] Gebruik van Model Validation

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 17-09 19:30
Beste allen (op deze zonnige dag).

Ben fijn aan het werk geslagen met het nieuwe ASP.NET MVC (2.0) echter loop vast op het volgende punt. Ik gebruik een huidig framework en hiervoor moet een WebApi komen, echter deze gebruiken ook gewoon modellen die ik direct kan vullen en saven via het ingebakken Framwork.

Een klein voorbeeldje:
[ PersonModel (object) ]
Firstname
Prefix
Lastname

kan ik dus direct uit het framework halen. Echter wil ik modelvalidation gebruiken binnen ASP.NET MVC, er zou dus <Required()> en een displayname bij moeten komen, maar ik kan Exact dezelfde modellen gebruiken als er uit het framework komen.

[ PersonModel (object) ]
<Required()>
Firstname
<Required()>
Lastname
Prefix

Zou ik dus willen hebben. Wat is de meest nette manier van het overloaden van deze modellen van? De data annotations (dus de Required() enzo) kan ik niet in het framework bakken aangezien deze de dependancies mist van System.web (denk dat je dat er ook helemaal niet in wil hebben).

Enige suggesties? En ja ik kan ook gewoon dingen aanpassen in het huidige framework, maar ik vind het zo zonde om 2 keer dezelfde modellen te laten terugkomen aangezien de website gewoon bij die modellen kan komen (maar het framework niet bij de modellen van de website).

Wat heb ik zelf al gedaan
www.asp.net compleet doorgelopen
Gegoogled opNaar wat voor oplossing zoek ik
Zorgen voor het compleet gebruik van de Models die al tot mijn beschikking zijn maar met uitbreiding van zogehete model Validators / Annotation

C#:
1
2
3
Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations
Imports System.Globalization


Men werkt met een vb.net 2.0 environment geen idee of dat erin kan, zoek meer iets als aangegeven in mijn post hieronder (2e post van mij ;))

Wat doe ik nu
In de controller:

Visual Basic .NET:
1
2
3
Dim model as new Framework.PersonModel ' Get a model
Framework.Fill(id, model) ' to fill
Framework.Save(id, model) ' to save (en natuurlijk doe ik deze volgorde niet, bij post saven, en anders fillen of niet fillen als je een nieuwe user aanmaakt)


Zo haal ik het model op en vul ik hem.

[ Voor 47% gewijzigd door XiniX88 op 24-03-2010 13:56 ]


Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06

HMS

De annotations zitten niet in de System.Web namespace, maar in System.ComponentModel.DataAnnotations. In .NET 3.5 zijn ze niet zo compleet als in 4.0.

Eventueel heb ik hier een library voor geschreven zodat je het in een andere assembly kan gooien als een buddy class. (Te vinden op: http://github.com/jvandertil/FluentDataAnnotations)

Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 17-09 19:30
Ze gebruiken zelfs nog v2.0, maar wat jij zegt is dus gewoon in het framework de DataAnnotations erbij zetten? Op ASP.NET zag ik namelijk een mooie oplossing als je direct aan de slag gaat met de Database, deze kan je koppelen aan een model en vervolgens aangeven wat er required is en wat niet.

Ik hoopte eigenlijk op een dergelijke oplossing, misschien dat iemand die nog weet, dan hoef ik zo min mogelijk te kloten in het framework (het mag uiteraard wel, maar als het niet nodig is, doe ik het liever via een omweggetje).

Overigens HMS, ik heb mijn post nog een beetje aangepast, zoals je ziet. O en de reden waarom VB.NET, dat gebruiken ze hier en zijn ze hier gewent. Ben er zelf geen echte fan van.

Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06

HMS

Hmm VB.NET 2.0 :P. Ik weet niet hoe goed mijn library daar mee omgaat, maar goed.

Hier een voorbeeld wat je er mee kan doen:

C#:
1
2
3
4
5
6
7
8
public class TestEntityAnnotations : DataAnnotations<TestEntity>
{        
  public TestEntityAnnotations()
  {
    AnnotateProperty(x => x.Name).SetRequired();
    AnnotateProperty(x => x.Description).AddValidation.StringLength.Minimum(15);
  }
}


Dit zou dan in een aparte assembly / project komen te staan (BlablaFrameWork.Web.Validation oid ;-)) en door middel van het overschrijven van de ModelBinder / Validator zou je het automagisch kunnen laten valideren.

Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 17-09 19:30
Tnx overigens waarom ik dacht dat het System.web.mvc betrof is omdat ik naar de bovenste regel keek van een voorbeeld model namelijk:

<ValidateInput(True)> _

Men wil hier zeer snel overgaan naar 4.0 (als VS 2010 uit is), dus misschien toch maar voorstellen hier om dan direct Data annotations te gebruiken. Echter mis ik dan alleen bovenstaande, geen idee of die verplicht is om het model te laten valideren (ga ik bekijken, maar kom ik wel uit). die is dus idd niet required.

In ieder geval, ik ga het hier voorstellen (stage... jeej...) kijken wat ze er van vinden. In ieder geval onwijs bedankt, heb nu 2 oplossingen waar ik mee aan kan komen. Overigens vet geschreven je Library!

Oja als iemand anders nog een andere leuke oplossing heeft hoor ik het graag!

[ Voor 7% gewijzigd door XiniX88 op 24-03-2010 14:19 ]


Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06

HMS

ValidateInput is niet voor validatie van het model, kijk hier maar even: http://haacked.com/archiv...rge-of-your-security.aspx

Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 17-09 19:30
Hahaha, ik zat mn post echt net aan te passen (had het direct maar even getest) :) voor de 2e keer al, maar je hebt inderdaad gelijk! Gaat helemaal lukken zo, dacht bijna dat ik vast zat, staan maar heel weinig (voorgekauwde) oplossingen op het internet (athans op mijn zoektermen).

Nogmaals onwijs bedankt voor je input en verbeteringen!

Btw, dat .NET is helemaal zo gek nog niet (en dit komt van een alle behalve .net taal programmeur), ja ik werk er "al" 6 weken mee (*.NET), en wilde er eerst verre vandaan blijven... maar uiteindelijk, t is toch wel aardig (behalve de automagische garbage collection die ik nooit vertrouw)

Moet daarbij wel op aanmerken dat het mede komt door ASP.NET MVC, de normale ASP.NET omgeving... vind ik wat minder (zacht uitgedrukt).

[ Voor 43% gewijzigd door XiniX88 op 24-03-2010 14:23 ]


Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06

HMS

Geen probleem. Ik heb zelf al meer dan een jaar ervaring met ASP.NET MVC in combinatie met .NET 3.5 dus ben tegen veel dingen wel aangelopen. Dus post gerust als je meer vragen hebt ;-)

Succes met je stage :).
Pagina: 1