如何在ASP.NETMVC 3中以特定格式呈现日期时间?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (217)

如果我的模型类中有一个类型的属性DateTime如何以特定格式呈现它??例如,在以下格式中:ToLongDateString()退货?

我试过这个..。

@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())

因为表达式必须指向一个属性或字段,所以抛出一个异常。和这个

@{var val = item.MyDateTime.ToLongDateString();
  Html.DisplayFor(modelItem => val);
}

它不会抛出异常,但呈现的输出是空的(虽然val包含期望值,正如我在调试器中看到的那样)。

ToLongDateString只是一个例子。我真的想使用,而不是ToLongDateString为一个自定义的扩展方法DateTimeDateTime?

public static string FormatDateTimeHideMidNight(this DateTime dateTime)
{
    if (dateTime.TimeOfDay == TimeSpan.Zero)
        return dateTime.ToString("d");
    else
        return dateTime.ToString("g");
}

public static string FormatDateTimeHideMidNight(this DateTime? dateTime)
{
    if (dateTime.HasValue)
        return dateTime.Value.FormatDateTimeHideMidNight();
    else
        return "";
}

所以,我认为我不能在ViewModel属性上使用DisplayFormat属性和DataFormatString参数。

提问于
用户回答回答于

如果只想用特定格式显示日期,只需调用:

@String.Format(myFormat, Model.MyDateTime)

使用@Html.DisplayFor(...)只是额外的工作,除非你指定一个模板,或者需要使用建立在模板上的东西,比如迭代一个IEnumerable<T>。创建模板非常简单,并且可以提供很大的灵活性。在当前控制器(或共享视图文件夹)调用的视图文件夹中创建一个文件夹DisplayTemplates。在该文件夹内,添加一个部分视图,其中包含要为其构建模板的模型类型。在这种情况下,我添加/Views/Shared/DisplayTemplates并添加了一个称为部分视图ShortDateTime.cshtml

@model System.DateTime

@Model.ToShortDateString()

现在,可以使用以下行调用该模板:

@Html.DisplayFor(m => m.MyDateTime, "ShortDateTime")
用户回答回答于

你可以用[DisplayFormat]属性来修饰你的视图模型属性:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", 
               ApplyFormatInEditMode = true)]
public DateTime MyDateTime { get; set; }

在你看来:

@Html.EditorFor(x => x.MyDate)

或者,为了显示价值,

@Html.DisplayFor(x => x.MyDate)

另一种我不建议使用的可能性是使用弱类型的助手:

@Html.TextBox("MyDate", Model.MyDate.ToLongDateString())

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励