@ Html.DisplayFor – DateFormat(“mm / dd / yyyy”)
我有以下的razor代码,我想有mm/dd/yyyy
date格式:
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.cshtml
和DataType
属性:
[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
参数 。
我这样实现了类似的东西:
- 使用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
上面的@shortDateLocalFormat
variables格式化为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)方法做同样的事情的另一种方法。 当使用这个方法时,不需要使用Thread
的CurrentCulture
属性。 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 arguments
的No overload for method 'ToString' takes 1 arguments
错误。
你不能格式化一个可为空的DateTime – 你必须使用DateTime.Value属性。
@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty
提示:在将其放入视图之前,将这些东西用智能感知标准工作在一个标准的类中是很有帮助的。 在这种情况下,你会得到一个编译错误,这很容易在课堂上发现。