我正在使用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/