1

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

想知道有没有其他人经历过这种情况。它似乎只发生在有多个日期字段的视图上。

任何帮助,将不胜感激。

4

2 回答 2

1

我的第一个猜测是,在调用堆栈的某个较高位置,您的 Nullable<DateTime> 不是 Nullable<DateTime> ,因此会生成默认值,这就是您在结果中看到的值。

于 2012-11-07T17:22:58.407 回答
1

出现在您视图中的 Date (其中一些)不是 null,而只是 initialize new DateTime()。也就是说,它已经将值设置为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" })
 }

这将呈现任何有意义的传递DateTime值。在其他情况下,将使用。DateTime.Now

于 2012-11-07T19:13:52.960 回答