# Saturday, June 13, 2009

ASP.NET MVC Form Validation Error with Decimal Parsing

Today I tried to put a relatively simple form together and was hoping to be done in a few minutes. Included on the form is an optional field asking for a monetary value. The type in the database is money and using LINQ-to-SQL the type is represented as a decimal.

All was well until the user entered a value that decimals generally don’t like to be converted into. Let’s assume ‘aaa’ for the time being. The result I was greeted with was this:

The model of type 'Foo' was not successfully updated.
My desire for ASP.NET MVC to handle this for me and put a nice validation message into the ModelState was just not happening.

My original code did this:
Foo foo = _modelRepository.FindFoo(id);

UpdateModel(foo);

The relatively simple fix is:
Foo foo = _modelRepository.FindFoo(id);

UpdateModel(foo, "SomeStringField", "SomeOtherStringField");

if (!TryUpdateModel(foo, "TheDecimalField"))
{
    ModelState.AddModelError("TheDecimalField", "Does that look like a number to you?");
}