ASP.MVC 4 DefaultModelBinder在空字符串绑定到List时失败

时间:2014-09-26 13:59:25

标签: c# asp.net asp.net-mvc modelbinders defaultmodelbinder

所以如果你把空字符串发布到像这样的控制器

<input type="text" value="" name="idList">

并尝试将其绑定到List非常奇怪的事情发生

enter image description here

有人遇到过这个问题吗?

为什么将默认的int值添加到列表中?

1 个答案:

答案 0 :(得分:2)

不,这并不奇怪,也不出乎意料。这里的问题是你不理解引用类型(字符串)和值类型(int)之间的区别以及它们的默认值。

int不能为null,并且必须始终具有值。在这种情况下,模型绑定器尝试将空字符串转换为列表并失败,因此它为该类型创建“默认”值,int为0(因为它不能为null)。如果转换失败,模型绑定器总是使用该类型的默认值,对于可空类型,该默认值为null,但对于值类型,默认值为默认值。

同时,您应该在ModelState.Errors列表中放置一个错误,通知您有关此错误的信息。如果你想要null,那么你需要一个List nullable int。