jQuery datepicker未在所有视图中显示当前日期

时间:2012-11-07 17:17:36

标签: jquery asp.net-mvc

我正在使用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,对于显示当前日期的字段和不显示当前日期的字段,它们是相同的 - 除了当然的值!

想知道是否有其他人经历过此事。它似乎只发生在有多个日期字段的视图上。

任何帮助都将不胜感激。

2 个答案:

答案 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