【发布时间】:2019-04-05 12:42:58
【问题描述】:
视图工作正常,我可以看到日期时间选择器,但是当我单击提交时,日期时间字段为空(如果可以为空)或 01/01/0001 00:00 如果不可为空。
查看
<div class="form-group">
@Html.LabelFor(model => model.LaycanStartDate, htmlAttributes: new { @class = "control-label col-md-12" })
<div class="col-md-10">
@Html.EditorFor(model => model.LaycanStartDate, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.LaycanStartDate, "", new { @class = "text-danger" })
</div>
</div>
<script>
$(function () {
$.validator.methods.date = function (value, element) {
var date = moment(value, "DD/MM/YYYY HH:mm", true).format("DD/MM/YYYY HH:mm");
return this.optional(element) || moment(date, "DD/MM/YYYY HH:mm", true).isValid();
}
});
</script>
型号
[Display(Name = "LaycanStartDate", ResourceType = typeof(Resources.Resources))]
[DataType(DataType.DateTime)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
public DateTime LaycanStartDate { get; set; }
日期时间.cshtml
@model DateTime?
@(Html.Kendo().DateTimePickerFor(m => m).HtmlAttributes(new { style = "width: 100%; max-width: 280px", title = "datetimepicker"}))
【问题讨论】:
-
这意味着绑定失败,而不是控件发送 NULL 或零日期。可能是发布的本地化字符串不是 ISO8601 日期,其格式与服务器的格式不匹配。您可以使用 Fiddler 检查实际发布到服务器的内容
-
日期的显示格式不必与发布到服务器的字符串格式相同。可以将输入框配置为使用
dd/MM/YYYY,仍然可以将YYYY-MM-dd发布到服务器 -
谢谢。因此 Fiddler 显示值正确通过,但在 ActionResult 中绑定后它是错误的。如何在发布时将格式更改回 ISO?
-
正确地表示它们是 ISO8601 格式,即
2019-03-28。否则它们是需要解析的字符串,可能会失败 -
请在问题中发布。这是最重要的代码。您可以在那里设置
Format、文化和绑定信息。以Check this question 为例。
标签: c# asp.net-mvc datetimepicker kendo-asp.net-mvc