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

ASP.NET Core 7.0中如何在输入框显示DateTime.Now?页面加载无内容

问题分析与解决方案

核心问题

你的代码存在三个关键问题导致日期无法显示:

  1. 视图绑定冲突:同时使用asp-for和手动value属性时,asp-for会自动覆盖手动设置的value,且你未将ViewModel传递到视图,导致asp-for无法获取有效值。
  2. HTML5日期格式要求:浏览器的date类型输入框仅接受yyyy-MM-dd格式的日期值,你的dd/MM/yyyy格式不被识别。
  3. 冗余的日期转换:Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"))属于无效操作,完全可以直接使用DateTime.Now.Date获取当前日期。

修正步骤

1. 调整ViewModel的格式配置

保持DataType.Date特性,同时将DisplayFormat设置为HTML5日期控件支持的格式:

public class DateShowVM
{
    [DataType(DataType.Date)]
    // HTML5 date控件要求值为yyyy-MM-dd格式,ApplyFormatInEditMode确保编辑时应用此格式
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime TranDate { get; set; }
}

2. 修改Action方法,传递ViewModel到视图

放弃ViewBag,直接实例化ViewModel并赋值:

public IActionResult Index()
{
    var viewModel = new DateShowVM
    {
        TranDate = DateTime.Now.Date // 仅取日期部分,忽略时间
    };
    return View(viewModel);
}

3. 修正视图代码

指定视图模型,移除手动value属性,让asp-for自动完成绑定:

@model DateShowVM

<div class="form-group">
    <label asp-for="TranDate" class="control-label"></label>
    <input asp-for="TranDate" readonly class="form-control" />
    <span asp-validation-for="TranDate" class="text-danger"></span>
</div>

补充说明

  • 浏览器的date输入框显示格式由用户系统的区域设置决定,无需手动指定显示格式,只需确保传递的日期值为yyyy-MM-dd格式即可。
  • 若需要自定义显示格式(如强制显示dd/MM/yyyy),则需将输入框类型改为text,并通过JavaScript或后端格式化来实现,但会失去原生日期选择器的功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:52:32