ASP.NET MVC:从没有ModelState错误的空字符串绑定数字类型

时间:2009-07-06 15:06:36

标签: asp.net-mvc modelbinders

我有一个包含decimal属性的相当复杂的ViewModel,它们以文本框的形式向用户公开。我想要一个没有值的文本框被解释为零。 (基础域对象中的属性不可为空,默认值为0.)

DefaultModelBinder将视图数据绑定到ViewModel时,带有输入空字符串的十进制属性初始化为零(在.NET中是标准的),但DefaultModelBinder正在向ModelState为空白文本框。因此,ModelState无效,用户会看到一大堆“需要一个值”。他们留空的文本框的错误。

如何阻止这些错误被添加到ModelState?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以做的最好的事情是创建一个ViewModel。而不是直接绑定到您的域模型,而是绑定到仅为了向您的视图传输数据而创建的ViewModel。在ViewModel上,您可以将这些字段创建为可为空的小数。然后,您可以根据需要将ViewModel映射回您的域模型。

这确实是正确的行为。如果在TextBox中没有输入任何内容,那么它等于null,而不是0.