asp.net MVC ModelState.IsValid返回false
我正在ASP.NET MVC应用程序中工作。我有一个视图模型如下:asp.net MVC ModelState.IsValid返回false
public class SampleInterestViewModel
{
//Properties defined
//One such property that shows an error in ModelState is as follows
public DateTime? SampleDate { get; set; }
}
从UI角度用户可以输入日期为mmddyyyy。当用户输入 01012001这样的格式时,控制器中的我的ModelState.IsValid代码片段返回false。当我在ModelState中快速观察时,发现Propery“SampleDate”的错误,并说“值01012001对SampleDate无效”。
在我的模型绑定器中,在OnModelUpdated事件期间,我尝试将值01012001设置为01/01/2001,并将其指派回SampleInterestViewModel.SampleDate,认为ModelState.IsValid可能会返回true,而不会出现该错误。但是仍然ModelState.IsValid是false,当我查看ModelState字典时,这个特定的属性在它的集合中仍然存在这样的错误。
最后,我试图格式化01012001并将值01/01/2001直接更新到ModelState字典中的Property SampleDate。但是仍然ModelState.IsValid为false,显示SampleDate属性的相同错误。无法弄清楚为什么ModelState.IsValid的工作原理以及它被设置为false的方式和时间。
如果用户在UI中输入01012001,我仍然需要在modelbinder中将其格式设置为01/01/2001,并确保ModelState.IsValid为true,以便我的控制器代码的其余部分可以按预期工作。在UI中,我正在做一个AjaxSubmit来发布sampleDate值。
任何想法或意见。
我可以看到一些解决方案:
- 模型中的粘结剂固定格式后,您可以用
ModelState["SampleDate"].Errors.Clear();
清除的ModelState错误。 - 使用JavaScript验证输入以强制用户输入正确的格式。
- 使用JavaScript在表单发布之前更改用户的格式。
我认为1和2的组合是你最好的选择。
非常好的答案。但是我仍然会按照@布拉德利的方式继续前进。但从你的回答中我学到了一些新东西。 – SARAVAN 2010-05-21 17:17:52