【发布时间】:2012-10-22 22:34:55
【问题描述】:
我正在尝试验证与模型中double 类型的属性相对应的文本框的输入。如果用户输入"foo" 我想知道它,以便显示错误。但是,ValueProvider 正在默默地删除该值(ModelState 中没有添加任何错误)。
在正常的提交中,我在myDouble对应的文本框中填写"2"并提交表单。
检查controllerContext.HttpContext.Request.Form 显示myDouble=2 以及其他正确的输入。 bindingContext.ValueProvider.GetValue("myDouble") == 2,正如预期的那样。 bindingContext.ModelState.Count == 6 和 bindingContext.ModelState["myDouble"].Errors.Count == 0。一切都很好,模型按预期绑定。
然后我在myDouble对应的文本框中填写“foo”并提交表单。
检查controllerContext.HttpContext.Request.Form 显示myDouble=foo,这是我所期望的。但是,bindingContext.ValueProvider.GetValue("myDouble") == null 和 bindingContext.ModelState.Count == 5(确切的数字并不重要,但比以前少了一个)。查看ValueProvider,就好像myDouble 从未提交过,模型绑定就好像没有提交一样。这使得很难区分输入错误和无输入。
这是ValueProvider 的预期行为吗?有没有办法让ValueProvider 在没有实现自定义ValueProvider 的情况下报告转换失败?谢谢!
【问题讨论】:
-
用RequiredAttribute装饰字段。
-
您能否为模型显示一点代码以及视图所需的那一点点代码,因为我已经对其进行了测试,
ModelState.IsValid是false用于接收文本的double。 -
@Silvermind - 你确定你不是指
double? -
@MystereMan 对不起,我的错。我的意思是双重提交的文本,但我在 ASP.NET MVC4 上对其进行了测试;)
-
@Silvermind - 我想这还不清楚。这 ?位于代码括号内,表示可以为空的双精度。你确定你不是指可空的
double?而是double?
标签: asp.net-mvc-3 model-binding value-provider