2

我在 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 Perspective 用户可以输入日期为 mmddyyyy。当用户以这种格式输入 01012001 时,我在控制器中的 ModelState.IsValid 代码段返回 false。当我在 ModelState 中快速查看时,我看到属性“SampleDate”的错误,说“值 01012001 对 SampleDate 无效”。

在我的模型绑定器中,在 OnModelUpdated 事件期间,我尝试将值 01012001 格式化为 01/01/2001 并将其分配回 SampleInterestViewModel.SampleDate 认为 ModelState.IsValid 可能返回 true 而不会出现该错误。但是 ModelState.IsValid 仍然是假的,当我查看 ModelState 字典时,这个特定的属性在它的集合中仍然存在错误。

最后,我尝试格式化 01012001 并将值 01/01/2001 直接更新为 ModelState 字典中的 Property SampleDate。但 ModelState.IsValid 仍然为 false,显示 SampleDate 属性的相同错误。无法弄清楚为什么 ModelState.IsValid 有效,以及它如何以及何时设置为 false。

如果用户在 UI 中输入 01012001,我仍然需要在模型绑定器中将其格式化为 01/01/2001 并确保 ModelState.IsValid 为 true,以便我的控制器代码的其余部分可以按预期工作。在 UI 中,我正在执行 AjaxSubmit 以发布 sampleDate 值。

任何想法或评论。

4

2 回答 2

4

尝试在您的操作中使用要绑定的参数白名单,使用

Bind(Include="param1,param2...")

在该列表中,省略您自己绑定的参数。阅读ScottGu 的帖子以获取更多信息。

于 2010-05-21T16:12:11.020 回答
4

我可以看到一些解决方案:

  1. 在模型绑定器中修复格式后,您可以使用 清除 ModelState 错误ModelState["SampleDate"].Errors.Clear();
  2. 使用 JavaScript 验证输入以强制用户输入正确的格式。
  3. 在表单发布之前使用 JavaScript 更改用户的格式。

我认为1和2的组合是你最好的选择。

于 2010-05-21T16:32:13.900 回答