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

ASP.NET MVC+EF Core下DateTimePicker视图无法显示值的问题咨询

解决ASP.NET Core MVC中datetime-local控件无法显示DateTime值的问题

问题原因

这不是模型设计或对象关系问题,核心原因是HTML的datetime-local类型输入框要求严格的ISO 8601格式(yyyy-MM-ddTHH:mm),而.NET默认渲染DateTime值时的格式不符合该要求,导致控件无法识别并显示值。虽然@Html.DisplayFor能正常显示,是因为它使用的是面向展示的格式规则,而非控件要求的标准格式。

解决方案

1. 给ViewModel的Date属性添加格式特性

在ViewModel的Date属性上标注DisplayFormat特性,指定符合要求的格式,并开启编辑模式下的格式应用:

using System.ComponentModel.DataAnnotations;

public class PartyViewModel
{
    // 其他属性...
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-ddTHH:mm}", ApplyFormatInEditMode = true)]
    public DateTime Date { get; set; }
}

2. 正确渲染输入控件

  • 使用Tag Helper方式(推荐):
<input asp-for="Date" type="datetime-local" class="form-control" />
  • 使用Html.TextBoxFor方式:
@Html.TextBoxFor(m => m.Date, "{0:yyyy-MM-ddTHH:mm}", new { @type = "datetime-local", @class = "form-control" })

3. 处理时区相关问题

如果数据库中存储的是DateTimeOffset类型,需要先转换为不带时区的DateTime(因为datetime-local不支持时区信息),比如在从实体映射到ViewModel时:

// 从Party实体映射到ViewModel
var viewModel = new PartyViewModel
{
    // 其他属性赋值...
    Date = partyEntity.DateOffset.LocalDateTime; // 或转换为UTC时间,根据业务需求
};

内容的提问来源于stack exchange,提问作者Duyễn Ng.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:23:23