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
相关产品推荐
相关产品推荐

