我的模型中有一个日期和一个日期时间字段:
[Display(Name = "Tanggal")]
[Required(ErrorMessage = "Tanggal harus diisi.")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime Date { get; set; }
[Display(Name = "Waktu Penumpukan")]
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:DD/MM/YYYY HH:mm:ss}", ApplyFormatInEditMode = true)]
public DateTime StackingDate { get; set; }
我使用 bootstrap datetimepicker 作为日期时间字段,使用 HTML5 日期选择器作为日期字段。
<div class="form-group">
<div class="col-md-12">
@Html.LabelFor(model => model.Date)
@Html.EditorFor(model => model.Date, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Date, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-12">
@Html.LabelFor(model => model.StackingDate)
<div id="datetimepicker1" class="input-group date">
@Html.TextBoxFor(model => model.StackingDate, new { @class = "form-control" })
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
@Html.ValidationMessageFor(model => model.StackingDate, "", new { @class = "text-danger" })
</div>
</div>
我正在使用 Moments 并修改 javascript 中日期时间格式的已知错误
$.validator.methods.date = function (value, element) {
return this.optional(element) || moment(value, "DD/MM/YYYY HH:mm:ss", true).isValid();
}
我的 datetimepicker javascript 初始化看起来像这样:
$('#datetimepicker1').datetimepicker({
format: 'DD/MM/YYYY HH:mm:ss'
});
我不使用引导日期时间选择器作为日期字段,因为我使用的是 HTML5 默认日期。它对于日期时间字段工作正常,但我在日期方面遇到错误。
Tanggal 字段必须是日期。
如果我删除验证器,它对于日期工作正常,但对于日期时间字段同样错误。
我发现验证器可以通过id过滤
$.validator.methods.date = function (value, element) {
if (element.id === "Date") {
// For the "Tanggal" field, validate using HTML5 format
return this.optional(element) || moment(value, "YYYY-MM-DD", true).isValid();
} else {
// For the "StackingDate" field, validate using custom format
return this.optional(element) || moment(value, "DD/MM/YYYY HH:mm:ss", true).isValid();
}
};