【发布时间】: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.ToStringyyyy-MM-dd中删除时间@
标签: c# .net model-view-controller model odata