我在我的模型中声明了一个字段:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? dataCreazione { get; set; }
在 View 中,我使用助手渲染字段:
@Html.EditorFor(m => m.dataCreazione )
当我提交带有 dataCreazione null 的表单(通过 js - 表单序列化)时,通过调试我在 Controller 方法中看到 dataCreazione 字段值为 null(正确),但是 ModelState 无效并显示消息(“dataCreazione 应该格式化。 ……”)。
为什么要在可为 null 的 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 提交了一个日期为空的表单,并且在服务器端,日期时间被初始化为 01/01/0001(并且模型状态有效)。
我只是不提示为什么我不能提交一个 datetime null 并收到一个无效的 modelstate。
最佳答案
我现在刚刚在 .net Core 2.2 上遇到了这个问题(我的项目实际上可能是在去年问这个问题的时候在 2.1 中创建的)。
我的解决方案是更改我在标签助手之外创建的 selectlist
选项(没有值):
<option>Please select one</option>
成为:
<option value="">Please select one</option>
这也不明显,因为 null
值被传回应该有效的 Controller 。它仅在表单错误中很明显:
The value "Please select one" is not valid for...
现在在调试时,传递回 Controller 的模型看起来相同(根据 VS2017),但 ModelState.IsValid
的计算结果为 true
并且一切都按预期工作。
关于c# - .NET 核心日期时间?如果为 null,则字段 ModelState 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53621092/