@ Html.DisplayFor – DateFormat(“mm / dd / yyyy”)

我有以下的razor代码,我想有mm/dd/yyyydate格式:

 Audit Date: @Html.DisplayFor(Model => Model.AuditDate) 

我尝试了多种不同的方法,但没有一种方法适用于我的情况

我的AuditDate是一个DateTime? types

我尝试过这样的事情,并得到这个错误:

 @Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString()) 

附加信息:模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器expression式。

试过这个:

 @Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy")) 

方法'ToString'没有重载需要1个参数

如果使用DisplayFor ,则必须通过DisplayFormat属性定义格式或使用自定义显示模板。 (预设的DisplayFormatString的完整列表可以在这里find。)

 [DisplayFormat(DataFormatString = "{0:d}")] public DateTime? AuditDate { get; set; } 

或者创build视图Views\Shared\DisplayTemplates\DateTime.cshtml

 @model DateTime? @if (Model.HasValue) { @Model.Value.ToString("MM/dd/yyyy") } 

这将适用于所有的DateTime时间,即使是在你编码的时间也是如此。 如果您只希望将其应用于仅限date的属性,请在属性上使用Views\Shared\DisplayTemplates\Date.cshtmlDataType属性:

 [DataType(DataType.Date)] public DateTime? AuditDate { get; set; } 

最后的select是不使用DisplayFor ,而是直接渲染属性:

 @if (Model.AuditDate.HasValue) { @Model.AuditDate.Value.ToString("MM/dd/yyyy") } 

如果您只是输出该模型属性的值,则不需要DisplayFor html助手,只需使用正确的string格式即可直接调用它。

Audit Date: @Model.AuditDate.Value.ToString("d")

应该输出

Audit Date: 1/21/2015

最后,您的审计date可能为空,所以您应该在尝试格式化可空值之前进行条件检查。

 @if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")} 

谷歌search错误,你正在提供这个答案 ,这表明错误是从你的Html助手使用单词模型。 例如,使用@Html.DisplayFor(Model=>Model.someProperty) 。 更改这些以使用除Model以外的其他内容,例如: @Html.DisplayFor(x=>x.someProperty)或在这些助手中将大写M更改为小写m

@ ChrisPratt关于使用显示模板的回答是错误的。 正确的代码,使其工作是:

 @model DateTime? @if (Model.HasValue) { @Convert.ToDateTime(Model).ToString("MM/dd/yyyy") } 

这是因为.ToString() for Nullable<DateTime>不接受Format参数 。

我这样实现了类似的东西:

  1. 使用TextBoxFor以所需的格式显示date,并使该字段只读
 @Html.TextBoxFor(Model => Model.AuditDate, "{0:dd-MMM-yyyy}", new{@class="my-style", @readonly=true}) 

2.在CSS中给框和零边框

 .my-style { outline: none; border: none; } 

而……它的完成:)

经过一番挖掘,我最终设置了Thread的CurrentCulture值,在控制器的action方法中有CultureInfo(“en-US”) :

 Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 

如果你想在每个视图上都有这个设置,还有其他一些选项 。

关于CurrentCulture属性值:

此属性返回的CultureInfo对象及其关联的对象决定date,时间,数字,货币值,文本的sorting顺序,套pipe约定和string比较的默认格式。

来源: MSDN CurrentCulture

注意:如果控制器已经运行了CultureInfo("en-US")或类似的date格式是"MM/dd/yyyy" ,则以前的CurrentCulture属性设置可能是可选的。

在设置CurrentCulture属性之后,添加代码块以在视图中将date转换为"M/d/yyyy"格式:

 @{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @shortDateLocalFormat 

上面的@shortDateLocalFormatvariables格式化为ToString("M/d/yyyy") 。 如果使用了ToString("MM/dd/yyyy") ,就像我先做的那样,最终导致零问题 。 也像Tommy ToString("d")推荐的那样工作。 其实"d"代表“短date模式” ,也可以用于不同的文化/语言格式。

我想上面的代码块也可以用一些很酷的辅助方法或类似的替代。

例如

 @helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat } 

可以用这个帮手调用

 @DateFormatter(Model.AuditDate) 

更新 ,我发现有使用DateTime.ToString(String,IFormatProvider)方法做同样的事情的另一种方法。 当使用这个方法时,不需要使用ThreadCurrentCulture属性。 CultureInfo("en-US")作为第二个parameter passing – > IFormatProvider传递给DateTime.ToString(String, IFormatProvider)方法。

修改的帮手方法:

 @helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat } 

.NET小提琴

对我来说就足够了

 [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { set; get; } 

也许试试吧

 @(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty) 

也可以使用许多types的string格式,如.ToString(“dd MMM,yyyy”).ToString(“d”)等

我在我的控制器上有类似的问题,这是什么对我有用:

 model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : "" 

“DateSigned”是来自我的模型的值行读取,如果模型值有一个值然后格式化该值,否则什么都不显示。

希望有所帮助

我一直在我的代码中使用这个改变:

旧代码:

  <td> @Html.DisplayFor(modelItem => item.dataakt) </td> 

新:

 <td> @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy") </td> 

看到这个答案关于No overload for method 'ToString' takes 1 argumentsNo overload for method 'ToString' takes 1 arguments错误。

你不能格式化一个可为空的DateTime – 你必须使用DateTime.Value属性。

 @Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty 

提示:在将其放入视图之前,将这些东西用智能感知标准工作在一个标准的类中是很有帮助的。 在这种情况下,你会得到一个编译错误,这很容易在课堂上发现。