我正在使用jquery datepicker,并为日期字段创建了一个编辑器模板。我的代码如下所示。
$(document).ready(function () {
$('.date').datepicker({ dateFormat: "dd/mm/yy"});
});
@model Nullable<DateTime>
@{
DateTime dt = DateTime.Now;
if (Model != null)
{
dt = (System.DateTime) Model;
}
@Html.TextBox("", String.Format("{0:d}", dt.ToShortDateString()), new { @class = "date" })
}
由于某种原因,当前日期仅显示在某些视图上。在其他日期,日期显示为空01/01/0001。我检查并仔细检查了我的代码,但没有发现任何问题。我还通过开发人员工具检查了输出的html,对于显示当前日期的字段和不显示当前日期的字段,它们是相同的 - 除了当然的值!
想知道是否有其他人经历过此事。它似乎只发生在有多个日期字段的视图上。
任何帮助都将不胜感激。
答案 0 :(得分:1)
我的第一个猜测是,在调用堆栈的某个位置更高的Nullable&lt; DateTime&gt;不是Nullable&lt; DateTime&gt;因此生成了您在结果中看到的默认值。
答案 1 :(得分:1)
您的观看日期(其中一些)是非空,但只是初始化new DateTime()
。
那个meaas,它已经将值设置为 01/01/0001 。因此,它不会在if
语句中被评估为null。所以它没有改为DateTime.Now
要修复它,只需按照这种方式转换if代码
@{
var date = Model as DateTime?; // local reference to a DateTime?
if (!date.HasValue // check if it is not null
|| date.Equals(default(DateTime))) // check if it is not default 01/01/0001
{
date = DateTime.Now;
}
@Html.TextBox("Name", String.Format("{0:d}", date.Value.ToShortDateString()), new { @class = "date" })
}
这将呈现任何有意义的<{1}}值。在其他情况下,将使用DateTime
。