Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Validation of complex classes in ASP.NET MVC4 fails

came across an issue with validation of complex classes in ASP.NET MVC4 using DataAnnotation.

Let's have a following model (simplified)

public class Customer
{
   [Required]
   [StringLength(8, MinimumLength = 3)]        
   public string UserName { get; set; }

   [Required]
   [StringLength(8, MinimumLength = 3)]
   public string DisplayName { get; set; }
}


public class Order
{
    public Customer customer { get; set; }
}

Then I try to validate an instance of this model in my controller:

// CREATE A DUMMY INSTANCE OF THE MODEL 
Customer cust = new Customer();
cust.UserName = "x";
cust.DisplayName = "x";

Order orderModel = new Order();
orderModel.customer = cust;

// VALIDATE MODEL
TryValidateModel(orderModel); // ModelState.IsValid is TRUE (which is incorrect)
TryValidateModel(cust); // ModelState.IsValid is FALSE (whic is correct}

Validation of orderModel should fail as the cust.UserName has only 1 character, but 3 are required by the Model. Same applies to cust.DisplayName. But when I validate a pure Customer class then it fails as expected.

Any idea what's wrong?

thanks

Jiri

like image 783
Jiri Matejka Avatar asked Aug 30 '12 13:08

Jiri Matejka


Video Answer


1 Answers

DataAnnotations won't dig into your objects on it's own. You have two choices:

1--Write a custom validator to check child properties

2--Create a view model with populated with the simple properties decorated with data annotations

like image 163
Forty-Two Avatar answered Oct 29 '22 07:10

Forty-Two