0

我的日期字段有一个编辑器模板,如果该字段为空,它会设置当前日期。

@model Nullable<DateTime>

@{
    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("", String.Format("{0:d}", date.Value.ToShortDateString()), new { @class = "date" })
 }

我想将此模板仅应用于我的创建视图。

当我编辑一条记录时,上面的代码会填充我故意保留为空的字段的当前日期,因为日期未知。

想知道我的代码是否可以修改以适应这种情况?

任何帮助,将不胜感激。

4

1 回答 1

2

有几种方法可以做到这一点。

第一种方法是通过您的 ViewData 传递一个标志,如下所示:

@Html.EditorFor(m => m.SomeDate, new { nowIfNull = true })

然后更新您的模板:

@model Nullable<DateTime>

@{
    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
        && ((bool?)ViewData["nowIfNull"] ?? false)) // check if it should set to now if null
    {
        date = DateTime.Now;
    }

    @Html.TextBox("", date == null ? String.Empty : String.Format("{0:d}", date.Value.ToShortDateString()), new { @class = "date" })
 }

另一种方法是在您创建新模型时将其默认设置DateTime.Now在您的控制器中——或者甚至更好的映射器中。这将在控制器/映射器而不是视图中设置默认值的关注点分开。

于 2012-11-09T14:26:08.117 回答