There are times that I find my ModelState is invalid but can not find what has invalidated it since there are no ModelErrors. What is the easiest way to determine what has invalidated your model state if you yourself haven't added a ModelError?
Looking at the asp.net mvc source code, the IsValid property on the ModelStateDictionary is simply returning true or false depending on whether there are any errors in the ModelState ICollection held in the Values property.
You should be able to find any errors including the message and exception like this:
foreach(var modelStateValue in ViewData.ModelState.Values)
{
foreach(var error in modelStateValue.Errors)
{
// Do something useful with these properties
var errorMessage = error.ErrorMessage;
var exception = error.Exception;
}
}
I've ran across a similar problem and, using the same kind of routine that Steve provided, found an exception was being thrown (ungracefully) somewhere inside the the default model binder that did not make its way into the Html.ValidationSummary.
The problem in particular that I had was a dropbox with "Yes" or "No" options, with values of "1" and "0" (instead of "true" and "false"), and the Model Binder choked on trying to convert these to a boolean (which my entity's member was expecting), stating that 0 is not a valid value for Boolean.
I would have hoped that a nice message would be produced stating my selection was invalid, but instead I was treated to an empty ValidationSummary. It seems the exception was swallowed up! (and is now something I'll be looking out for in the future.) This should perhaps be filed with MS as a bug?