The ModelState.IsValid
internally checks the Values.All(modelState => modelState.Errors.Count == 0)
expression.
Because there was no input the Values
collection will be empty so ModelState.IsValid
will be true
.
So you need to explicitly handle this case with:
if (user != null && ModelState.IsValid)
{
}
Whether this is a good or bad design decision that if you validate nothing it will true is a different question…