[ASP.NET MVC]Model validatie op basis van ander model

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:27

Haan

dotnetter

Topicstarter
De situatie is opzich simpel:
Stel je hebt een website met meerdere tabs, bijvoorbeeld 1 voor persoonsgegevens en 1 voor bedrijfsgegevens. Dus je hebt een persoonmodel en een bedrijfmodel, waarbij het bedrijf is gekoppeld aan de persoon.

Wat ik nu vervolgens wil, is dat het bedrijfmodel pas valid is, als óók het persoonmodel valid is. Vanuit de bedrijfController kan ik aan het persoonmodel komen doordat je ingelogd moet zijn, en via de MembershipUser haal ik de juiste persoonsgegevens op.
Als je dus een bedrijf wil opslaan, maar je mist bepaalde verplichte velden bij de persoonsgegevens, moet je daarvan een foutmelding krijgen.
(dit voorbeeld klinkt wat eenvoudig, in werkelijkheid gaat het om een web portal met meerdere tabs, waarbij sommige views pas opgeslagen mogen worden als bepaalde data in andere models goed gevuld is)

Het beste dat ik kan verzinnen is om met reflection door het persoonmodel te lopen, te kijken welke properties required zijn, en obv daarvan te bepalen of het model valid is. Maar ik hoop eigenlijk dat je op een simpelere manier een model class kan valideren? Google heeft me helaas nog niet aan een oplossing geholpen.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Heb je al eens naar het specification pattern gekeken? Daarmee kun je zeer eenvoudig controleren of jouw model voldoen aan de eisen (specificaties) van een bedrijfmodel. De specificaties kun je het beste zien als een collectie simpele 'rules'.

Ik denk dat de video veel duidelijk maakt.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:27

Haan

dotnetter

Topicstarter
Het ziet er interessant uit, echter roept het kijken van de video in eerste instantie meer vragen op, dan dat het duidelijker wordt :P Misschien dat ik er overheen kijk, maar is er ook niet iets downloadbaars bij (afgezien van de video zelf)?

Ik bedenk me trouwens net dat het niet erg user friendly is om het model van een andere view te valideren. Dat zou betekenen dat je eerst van alles in zou vullen om er vervolgens achter te komen dat je eerst op een andere pagina nog iets moet invullen, waarna je je oorspronkelijke gegevens natuurlijk kwijt bent.

Dus de vraag wordt iets anders, kan je bij het renderen van een view controleren of een andere model valid is? Ik zou dan het liefst meteen een waarschuwing tonen, of beter nog, meteen naar de juiste view redirecten.

[ Voor 55% gewijzigd door Haan op 18-07-2011 14:25 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:34
Haan schreef op maandag 18 juli 2011 @ 14:19:
Dus de vraag wordt iets anders, kan je bij het renderen van een view controleren of een andere model valid is? Ik zou dan het liefst meteen een waarschuwing tonen, of beter nog, meteen naar de juiste view redirecten.
Hoor je dat niet in de controller te doen?
Dus iets als:
1). vul in
2). stuur form
3). controlleer, al dan niet door Model.Check() oid aan te roepen.
4). op basis van juistheid of terug of volgende tab

Acties:
  • 0 Henk 'm!

  • Arite
  • Registratie: April 2006
  • Laatst online: 26-08 16:11
Je kan ook een ViewModel aanmaken welke al je properties bevat welke gevalideerd moeten worden. Met AutoMapper kan je makkelijk je losse entities mappen naar jouw ViewModel

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:27

Haan

dotnetter

Topicstarter
Bedankt voor de tips, ik ga er binnenkort weer aan de slag, er komt helaas weer eens iets tussendoor met meer prioriteit..

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Als je een model hebt wat met attributen gedecoreerd is (RequiredAttribute e.d.) kun je met de volgende methodes simpel checken of 't model geldig is.

code:
1
System.ComponentModel.DataAnnotations.Validator.TryValidateObject(o, new ValidationContext(o, null, null), null);


of

code:
1
2
3
4
5
            var result = new List<ValidationResult>();

            Validator.TryValidateObject(o, new ValidationContext(o, null, null), result);

            return result;

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:27

Haan

dotnetter

Topicstarter
Dat is precies de functie waar ik naar op zoek was! _/-\o_

Kater? Eerst water, de rest komt later

Pagina: 1