【发布时间】:2019-05-06 08:39:37
【问题描述】:
我的模型中声明了一个字段:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? dataCreazione { get; set; }
在视图中,我使用助手渲染字段:
@Html.EditorFor(m => m.dataCreazione )
当我提交带有 dataCreazione null 的表单(通过 js - 表单序列化)时,通过调试,我在控制器方法中看到 dataCreazione 字段值 null(正确),但 ModelState 对消息无效(“dataCreazione 应该格式化。 ....”)。
为什么要验证可为空的 DateTime?我怎样才能避免它?我希望能够在不使模型状态无效的情况下提交 DateTime null。
编辑: 我通过js提交表单:
$.post(this.form.attr('action'), this.form.serialize(), function (data) {
if (data.url == null) {
_this.modal.find('.modal-content').empty();
_this.modal.find('.modal-content').html(data);
_this.bindEvents();
} else {
window.location.href = data.url;
}
});
如果我打印 form.serialize() 我看到参数将发送 dataCreazione=。 在另一个应用点,我通过 Http GET 提交了一个日期为 null 的表单,并且在服务器端,日期时间被初始化为 01/01/0001(并且模型状态有效)。
我只是没有抱怨为什么我不能提交一个 datetime null 并收到一个无效的模型状态。
【问题讨论】:
-
你能解释一下为什么吗?文档说数据类型注释仅用于显示,不影响验证模型
-
我刚刚尝试了您的代码,但未能重现您的问题。 1. 如何提交表格?您能否发布发送到服务器的完整有效负载? 2.另外,最好给我们展示一下服务器端的action方法。
-
综合题
-
仍然无法重现。您能否发布您的服务器端代码和发送到服务器的有效负载?
-
我发现错误,有一个自定义模型绑定器始终验证日期时间。可以关闭了,谢谢。
标签: c# datetime asp.net-core .net-core modelstate