我正在使用ASP.NET MVC应用程序。我有一个如下的视图模型:

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中进行快速监视时,看到属性“ SampleDate”的错误,并指出“值01012001对SampleDate无效”。

在我的Modelbinder中,在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的组合是最好的选择。

关于asp.net - asp.net MVC ModelState.IsValid返回false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2883630/

10-12 23:14