【问题标题】:ASP.Net Core MVC DisplayFormat not removing the time element of a dateASP.Net Core MVC DisplayFormat 不删除日期的时间元素
【发布时间】:2021-06-02 14:21:41
【问题描述】:

我正在使用 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

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

谢谢

【问题讨论】:

  • ASP.Net Core MVC 5.0 - 是 MVC 5.0(pre-core)、MVC Core(从未达到版本 5)还是 .NET 5 上的 MVC(post-core)?

标签: c# asp.net-core model-view-controller


【解决方案1】:
Registered on: @Model.Place.NextRenewalDueAt

格式化字符串仅在绑定数据绑定控件的值时应用于字段值(如:Html Helper:EditorFor()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

【讨论】:

  • 谢谢,吕志更改视图中的日期格式成功了!
【解决方案2】:

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

  1. Html.DisplayFor

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

  2. 在视图上格式化

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

    注册日期:@tempDate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多