我有一个包含decimal
属性的相当复杂的ViewModel,它们以文本框的形式向用户公开。我想要一个没有值的文本框被解释为零。 (基础域对象中的属性不可为空,默认值为0.)
当DefaultModelBinder
将视图数据绑定到ViewModel时,带有输入空字符串的十进制属性初始化为零(在.NET中是标准的),但DefaultModelBinder
正在向ModelState为空白文本框。因此,ModelState无效,用户会看到一大堆“需要一个值”。他们留空的文本框的错误。
如何阻止这些错误被添加到ModelState?
答案 0 :(得分:1)
在这种情况下,您可以做的最好的事情是创建一个ViewModel。而不是直接绑定到您的域模型,而是绑定到仅为了向您的视图传输数据而创建的ViewModel。在ViewModel上,您可以将这些字段创建为可为空的小数。然后,您可以根据需要将ViewModel映射回您的域模型。
这确实是正确的行为。如果在TextBox中没有输入任何内容,那么它等于null,而不是0.