2017-12-21 12 views
0

Ich habe eine ASP.NET MVC-Anwendung und möchte Validierung auf beiden Ebenen haben - View Model Validation und Domain Model Validierung basierend auf Daten Annotation Attribute. Ansicht Modellvalidierung funktioniert einfach:MVC - Domain-Modell validieren

public class CustomerFormVM 
{ 
    [Required] 
    [Display(Name = "Name")] 
    public string Name { get; set; } 
    [Required] 
    [Display(Name = "Street")] 
    public string Street { get; set; } 
    [Required] 
    [Display(Name = "City")] 
    public string City { get; set; } 
    [Required] 
    [Display(Name = "State")] 
    public string State { get; set; } 
} 

und rufen Sie dann in der Steuerung:

 if (ModelState.IsValid) 
     { 

Ich habe die gleiche Domain Modellklasse:

public class CustomerFormPoco 
{ 
    [Required] 
    [Display(Name = "Name")] 
    public string Name { get; set; } 
    [Required] 
    [Display(Name = "Street")] 
    public string Street { get; set; } 
    [Required] 
    [Display(Name = "City")] 
    public string City { get; set; } 
    [Required] 
    [Display(Name = "State")] 
    public string State { get; set; } 
} 

aber, wie es zu validieren?

// viewmodel is CustomerFormVM object 
var pocoModel = mapper.Map<CustomerFormPoco>(viewmodel); 

wenn ich nicht überprüfen ‚Viewmodel‘ Variable dann bekomme ich ‚pocoModel‘ Variable mit Nullable-Name, Straße, Ort ...

Wie Validierung aufzurufen und Entscheidung treffen, hängt von Ergebnis?

+0

Warum die Ansicht Modell nicht überprüfen, bevor Sie es auf dem Domänenmodell abzubilden? –

+0

Ich würde empfehlen, dass Sie davon ausgehen, dass die Daten bereits in der Anwendungsschicht validiert sind (mit Ihren Ansichtsmodellen), anstatt alles erneut zu validieren. Ihre Domäne sollte sich auf die Validierung von Geschäftsregeln und nicht auf Daten konzentrieren. – Alisson

+0

jQuery Validation kann Ihre Validierung des Viewmodels auf der Client-Seite übernehmen. Da Sie nur "Erforderliche" Attribute verwenden, die einfach sein sollten. Wenn es dann passiert, müssen Sie sich nicht um die Validierung auf der Serverseite kümmern. –

Antwort

0

Wie wäre es mit so etwas?

if (!string.IsNullOrEmpty(pocoModel.Name) && !string.IsNullOrEmpty(pocoModel.Street) && !string.IsNullOrEmpty(pocoModel.City) && !string.IsNullOrEmpty(pocoModel.State)) 
{ 
    // Code here 
} 

ich tun würde es wahrscheinlich mit weniger Redundanz wie folgt aus:

string[] fields = new string[] { pocoModel.Name, pocoModel.Street, pocoModel.City, pocoModel.State }; 
bool isValid = true; 
foreach (string field in fields) 
{ 
    if (string.IsNullOrEmpty(field)) 
    { 
     isValid = false; 
     break; 
    } 
} 
if (isValid) 
{ 
    // Code here 
} 
+0

mögen diesen Ansatz nicht. Zuerst einmal möchte ich keine Mischlogik mit Validierung kombinieren. Zweitens möchte ich Validierung innerhalb der Klasse haben. Drittens möchte ich Datenanmerkungsattribute verwenden –