MVC 5 – Model State Always False and Data Received is NULL – The Save Action Variable Name Must Be the Same Name as Your Model Name When Receiving Just the Model Portion of Your View Model That Was Bound to Your View

I struggled with this one and learned something that was not taught in the tutorial I took on MVC 5. The instructor did not mention that when you receive a model into your Save action (Controller) instead of your view model that is bound to your view, you have to name your variable the same name or at least with a small case as the first character as the model class name. If you follow this rule, the model state will be true and you will get your data.

Do this if you want to receive just the model of your ViewModel you bound to your view and sent back to the controller:

public ActionResult Save(Customer Customer)

or do this if you want to receive the entire ViewModel you bound to your view and sent back to the controller:

public ActionResult Save(CustomerFormViewModel viewModel)
​

Lastly, if you choose to receive back the entire viewModel, you can call your ViewModel variable whatever you want, but NOT when receiving back just the model.