在 DateTime 模型中使用数据注释

Using Data annotation in Model for DateTime

我正在使用以下代码在我的剃刀视图

中弹出日期的日历

型号

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        [DataType(DataType.Date)]
        public Nullable<System.DateTime> EndTime { get; set; }

查看

<div class="form-group">
            @Html.LabelFor(model => model.EndTime, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-4">
                @Html.EditorFor(model => model.EndTime, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.EndTime, "", new { @class = "text-danger" })
            </div>
        </div>

现在我想使用 DateTime 而不是 Date.What 应该是 DataFormat 字符串吗?

我的尝试

Display(Name = "End Date Time")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}{1:HH/mm}")]
        [DataType(DataType.DateTime)]

我收到格式异常?

您的 EditorFor() 方法使用 type="date" 呈现输入,因为 [DataType(DataType.Date)] 属性,这将生成浏览器 HTML-5 日期选择器(但这仅受支持在 Chrome 和边缘)。

要生成 HTML-5 日期时间选择器,您需要使用 type = "datetime-local" 呈现输入,但没有数据注释属性。相反,您需要自己生成 type 属性。

@Html.TextBoxFor(m => m.EndTime, "{0:s}", new { @type = "datetime-local", @class = "form-control" })

注意 "{0:s}""{0:yyyy-MM-ddTHH:mm:ss}" 的快捷方式,将以浏览器文化显示日期和时间。另请注意,您不需要 [DataType] 属性或 [DisplayFormat] 属性中的 ApplyFormatInEditMode = true 属性,因为它们仅适用于 EditorFor()