Model-based validation for ASP.NET MVC: better approach
No Comments » | Tuesday, September 9th, 2008In my previous post about model-based validation I introduced my concept of validating data using attributes as well as using my own HTML helpers to display errors. Many things have changed since then because of new MVC release. What’s new in ASP.NET MVC Preview 5?
- ModelState class which stores model’s validation errors and
- Model binders for populating data from forms to strongly typed objects.
You can read more about it in Scott gu’s article ASP.NET MVC Preview 5 and Form Posting Scenarios.
That’s why I have updated my code from last time to use some new stuff and to get much shorter code in controllers:
[ActionName("Create"), AcceptVerbs("POST")] public ActionResult Save() { if (this.IsModelValid(typeof(TestModel))) { // Save it, just an example _repository.Save<TestModel>(ViewData.Model); return RedirectToAction("Done"); } return View("Index"); }
What IsModelValid() does?
- validates submitted data (according to type, name and attributes)
- populates ViewData.ModelState with errors
- populates ViewData.Model
I really like this idea (code is very readable) but after reading Thoughts on validation in ASP.NET MVC applications I realized that my approach lacks in some ways:
- no repository specific error handling
- violating some good principles
So althrought Steve Sanderson’s code is a bit longer, his validation concept make sense and I am really looking forward to see it in action!