【问题标题】:How to get MVC model property to return a Date instead of DateTime?如何让 MVC 模型属性返回 Date 而不是 DateTime?
【发布时间】:2019-11-03 12:26:09
【问题描述】:

我的数据库模型具有 DateTime 属性。但是,此属性实际上是一个日期。在客户端上进行排序/过滤时,额外的时间组件会导致问题。许多表/客户端组件都有这个问题。

我希望我可以在模型级别解决此问题,并且仅在通过以下修改访问日期部分时才检索它。

private DateTime invoiceDate;
[Required]
public DateTime InvoiceDate { get => invoiceDate.Date; set =>invoiceDate = value; }

但是,这似乎不起作用。这样的事情可能吗?

编辑:我发现 C# 允许对模型进行更具体的 DataType 规范 - https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime EnrollmentDate { get; set; }

但是,当我点击我的 API 时,我仍然会获得完整的数据库信息

  "InvoiceDate": "2019-06-14T00:00:00-07:00"

为什么 C# 不使用提供的额外规范来解决这个问题?

编辑:

我还发现this helpful thread 建议向属性添加 JSON 转换器,但这也没有解决问题。时间仍在发送中。

【问题讨论】:

  • 您使用的数据类型仍然是DateTime,因此即使全为零,时间也会一直存在。你无法改变这一点。如果您想要仅日期的数据类型,请查看NodaTime。它的LocalDate 数据类型可能是您想要的。有一个单独的包用于向 Json.NET 添加 NodaTime 支持。您可能会发现自己正在为其他情况编写类型转换器。
  • 这是一个很好的观点,实际上我对现在的时间很好,只要它全部归零。只要它是一致的,过滤就会起作用。
  • 您是否尝试过在客户端上通过 API 格式化日期并在之后进行过滤/排序?
  • 我最终通过 OData 请求修改使其工作。我必须编辑字符串以将属性包装在 data(prop) 中,然后我必须编辑值以从 javascript 的 DateTime.ToString yyyy-MM-dd 中删除时间@

标签: c# .net model-view-controller model odata


【解决方案1】:

您可以将 Bind 与 exclude 一起用于您的属性

[Bind(Exclude="InvoiceDate")]
    public class YourModel{

    }

【讨论】:

  • 但是更新/创建不会设置这个属性吧?我仍然希望当前的控制器操作能够工作
【解决方案2】:

我最终通过 OData 请求修改使其工作。我必须编辑字符串以将属性包装在 data(prop) 中,然后我必须编辑值以从 javascript 的 DateTime.ToString yyyy-MM-dd 中删除时间

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2022-06-12
    • 1970-01-01
    相关资源
    最近更新 更多