ASP.Net Core MVC DisplayFormat 不删除日期的时间元素

问题描述

我使用的是 ASP.Net Core MVC 5.0

我想格式化日期时间?字段,以便它省略时间部分,只显示日期。

我有以下内容

[displayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:dd/MMM/yyyy}")]
public DateTime? NextrenewalDueAt { get; set; }

但它仍然显示时间部分 - 01/02/2021 00:00:00

显示 -

Registered on: @Model.Place.NextrenewalDueAt

我怎样才能摆脱时间部分?

谢谢

解决方法

看起来您不需要设置ApplyFormatInEditMode = true,因为它只是一个显示日期。因此,您可以尝试以下选项:

  1. Html.DisplayFor

    注册于:@Html.DisplayFor(m => m.NextRenewalDueAt)

  2. 在视图上格式化

    @{ var tempDate = Model.Place.NextRenewalDueAt.HasValue ? Model.Place.NextRenewalDueAt.ToShortDateString() : ""; }

    注册日期:@tempDate

,
Registered on: @Model.Place.NextRenewalDueAt

格式化字符串仅在绑定数据绑定控件的值时应用于字段值(例如:Html Helper: EditorFor() and DisplayFor(),Asp.net Core Tag Helpers: Input) .通过使用上面的代码,您只是从模型中获取日期,而不绑定到数据绑定控件,因此,它将显示原始格式(例如: 6/3/2021 2:29:23 PM)。

要解决这个问题,您可以使用以下方法:

  1. 使用 Html.DisplayFor() 方法:

    @Html.DisplayFor(m => m.NextRenewalDueAt)
    
  2. 更改视图中的日期格式。

    注册日期:@(Model.Place.NextRenewalDueAt.HasValue ? Model.Place.NextRenewalDueAt.Value.ToString("dd/MMM/yyyy") : "")

  3. 使用输入标签助手:

    <input asp-for="NextRenewalDueAt" class="form-control" type="text" readonly/>

    [注意] 因为,输入标签助手根据 .NET 类型设置 HTML 类型属性。要格式化日期时间数据类型,我们应该将 type 属性设置为 text,否则将使用 type="datetime-local"。更多详细信息,请参阅The Input Tag Helper

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...