@ Html.DisplayFor - DateFormat("mm/dd/yyyy")

Nic*_*ahn 73 asp.net asp.net-mvc

我有以下剃刀代码,我希望有mm/dd/yyyy日期格式:

Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
Run Code Online (Sandbox Code Playgroud)

我尝试了许多不同的方法,但这种方法都不适用于我的情况

我的AuditDate是一种DateTime?类型

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

@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Run Code Online (Sandbox Code Playgroud)

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

试过这个:

@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*att 136

如果使用DisplayFor,则必须通过DisplayFormat属性定义格式或使用自定义显示模板.(DisplayFormatString可在此处找到预设的完整列表.)

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

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

@model DateTime?
@if (Model.HasValue)
{
    @Model.Value.ToString("MM/dd/yyyy")
}
Run Code Online (Sandbox Code Playgroud)

这将适用于所有DateTimes,甚至是你编码时间的那些.如果您希望它仅应用于仅限日期的属性,请使用您Views\Shared\DisplayTemplates\Date.cshtmlDataType属性上的属性:

[DataType(DataType.Date)]
public DateTime? AuditDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

最后一个选项是不使用DisplayFor而是直接渲染属性:

@if (Model.AuditDate.HasValue)
{
    @Model.AuditDate.Value.ToString("MM/dd/yyyy")
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为应该是`[DisplayFormat(DataFormatString ="{0:MM/dd/yyyy}")]` (3认同)

Tom*_*mmy 18

如果您只是输出该模型属性的值,则不需要DisplayForhtml帮助程序,只需使用正确的字符串格式直接调用它.

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

应输出

Audit Date: 1/21/2015

最后,您的审核日期可能为null,因此您应该在尝试格式化可空值之前进行条件检查.

@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}
Run Code Online (Sandbox Code Playgroud)

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


Pio*_*rek 16

我一直在我的代码中使用此更改:

旧代码:

 <td>
  @Html.DisplayFor(modelItem => item.dataakt)
 </td>
Run Code Online (Sandbox Code Playgroud)

新的 :

<td>
 @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy")
</td>
Run Code Online (Sandbox Code Playgroud)

  • 是的,这只是主题问题的解决方案。我认为这可能对某人有帮助。 (2认同)

Aun*_*int 7

您可以在视图模型上使用 [ DisplayFormat ] 属性,因为您希望将此格式应用于整个项目。

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public Nullable<System.DateTime> Date { get; set; }
Run Code Online (Sandbox Code Playgroud)


Leo*_*lva 5

@ ChrisPratt关于使用显示模板的答案是错误的.使它工作的正确代码是:

@model DateTime?

@if (Model.HasValue)
{
    @Convert.ToDateTime(Model).ToString("MM/dd/yyyy")
}
Run Code Online (Sandbox Code Playgroud)

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


小智 5

我以这种方式实现了类似的事情:

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

2.在css中给TextBox赋予零轮廓零边框

.my-style {
    outline: none;
    border: none;
}
Run Code Online (Sandbox Code Playgroud)

并且......它完成了:)


Dev*_*per 5

对我来说,使用就足够了

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