ASP.NET Core 7.0中如何在输入框显示DateTime.Now?页面加载无内容
问题分析与解决方案
核心问题
你的代码存在三个关键问题导致日期无法显示:
- 视图绑定冲突:同时使用
asp-for和手动value属性时,asp-for会自动覆盖手动设置的value,且你未将ViewModel传递到视图,导致asp-for无法获取有效值。 - HTML5日期格式要求:浏览器的
date类型输入框仅接受yyyy-MM-dd格式的日期值,你的dd/MM/yyyy格式不被识别。 - 冗余的日期转换:
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
相关产品推荐
相关产品推荐

