Search code examples
asp.net-mvcvalidationmodelstate

Needing to copy properties before validation


I have a fairly complex model needing to be validated, the problem is that this model is used on two different places, one where you register your customer and one where you simply add addresses. Some fields on the address are simply not visible on the register customer form. So when i check if ModelState.IsValid i get false of course since eg. the name is not entered on the billing address, but it is on the customer. That is why i want to before validation occurs, copy a couple of fields to the model, and then validate. I am somewhat lost though and i need help.

My action looks something like this:

public ActionResult Register(WebCustomer customer) 
{
     customer.CopyProperties();
     if(TryUpdateModel(customer)) 
     {
       ...
     }
     ...

But it always returns false, and ModelState.IsValid continues to be false.


Solution

  • I think that the best approach in this situation, is to write CustomModelBinder, and apply it to your action parameter

    public ActionResult Register([ModelBinder(typeof(WebCustomerRegisterBinder))]WebCustomer customer)  
    {
      if(TryUpdateModel(customer))  
      { 
        ... 
      } 
      ...
    }
    

    This CustomModelBinder should take care of copying fields, and because its applied to action parameter it will be used only in this action.