DateTime编辑器模板仅用于创建视图



我有一个日期字段的编辑模板,该模板设置了当前日期,如果该字段为null。

@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" })
 }

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

编辑记录时,上面的代码填充了我故意离开的字段的当前日期,因为日期未知。

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

任何帮助将不胜感激。

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

第一种方法是通过您的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,甚至更好,甚至更好。这将在您的控制器/映射器中而不是视图中设置默认值的关注点。

最新更新