If you don't want to use built in Model Binding, then to use validation using ModelState.AddModelError you need to the model value as well. In your service layer you will need the following 2 lines for each property.
_modelState.AddModelError("Username", "Please provide a username");
_modelState.SetModelError("Username", ValueProvider["Username"]);
Have a look at these links also:
David Liddle
2009-12-05 08:59:04