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

ASP.Net Core MVC DisplayFormat not removing the time element of a date

我正在使用 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:输入)。通过使用上面的代码,您只是从模型中获取日期,而没有绑定到数据绑定控件,因此,它将显示原始格式(如: 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/>

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