You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor页面更新时日期时间无法显示与存储异常问题

解决ASP.NET Core Razor页面中Appointment日期时间显示与数据库存储问题

一、修正模型定义错误

你的AppTime字段用于存储时间,但模型错误标记了[DataType(DataType.Date)],导致格式逻辑完全混乱。同时需匹配正确的时间格式字符串,修正后的模型代码如下:

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

[Required]
[DataType(DataType.Time)]
[DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]
public DateTime AppTime { get; set; }

二、修复视图绑定问题

视图中手动指定value="@Model.AppDate"会覆盖asp-for标签助手的自动绑定逻辑,导致格式不符合浏览器date/time输入控件的要求。移除手动赋值,让标签助手自动处理格式:

<div class="input">
    <label asp-for="AppDate">Date Of Appointment:</label>
    <input asp-for="AppDate" type="date" />
</div>
<div class="input">
    <label asp-for="AppTime">Time Of Appointment:</label>
    <input asp-for="AppTime" type="time" />
</div>
  • asp-for会自动读取模型的DisplayFormat配置,为date控件生成yyyy-MM-dd格式的value,为time控件生成符合标准的时间格式,同时保留原生日历/时间选择器样式。
  • 无需使用@Html.TextBoxFor,原生asp-for配合对应type属性即可兼顾样式和数据绑定正确性。

三、处理数据库存储格式问题

DisplayFormat仅影响页面显示和模型绑定的格式转换,不会改变数据库中DateTime类型的存储格式——数据库的DateTime类型以二进制形式存储,你看到的"格式"只是数据库管理工具的展示方式,并非实际存储形态。

若要更精准地分离日期和时间存储(推荐ASP.NET Core 6+),可改用DateOnly和TimeOnly类型:

[Required]
public DateOnly AppDate { get; set; }

[Required]
public TimeOnly AppTime { get; set; }

这两个类型会自动映射到数据库的date和time字段,彻底避免DateTime类型的日期时间混合问题,存储和读取逻辑更清晰。

内容的提问来源于stack exchange,提问作者Sadia Mazhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:07:48