ASP.NET MVC (FX)中EditorFor控件无法显示数据库保存的日期值问题咨询
问题原因
你遇到的是HTML5日期输入框和ASP.NET MVC模型格式化不匹配的典型问题:
- 你给字段加了
[DataType(DataType.Date)]注解,EditorFor会默认生成type="date"的HTML5原生输入框,这类输入框要求传入的value必须符合yyyy-MM-dd的ISO标准格式,浏览器才能识别并自动填充显示。 - 你之前手动设置
@Value时用了mm-dd-yyyy格式:一方面小写mm是分钟的占位符,输出的内容根本不是月份;另一方面格式不符合原生输入框的要求,浏览器无法识别自然不会显示已有值。
解决步骤
1. 修正模型字段注解
给两个日期字段补充DisplayFormat配置,指定编辑模式下的格式化规则,无需手动拼接value:
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public System.DateTime Hire_Date { get; set; } [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public System.DateTime Injury_Date { get; set; }
参数ApplyFormatInEditMode = true会让MVC在渲染编辑框时,自动按照指定格式填充输入框的value值。
2. 还原Edit视图代码
去掉你之前手动加的@Value属性,改回原来的简洁写法即可:
<div class="form-group"> @Html.LabelFor(model => model.Hire_Date, "Hire Date", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-4"> @Html.EditorFor(model => model.Hire_Date, new { htmlAttributes = new { @class = "datepicker" } }) @Html.ValidationMessageFor(model => model.Hire_Date, "", new { @class = "text-danger" }) </div> <div style="margin-right:1%"><p style="color:#FF0000">*</p></div> </div>
3. (可选)匹配日期选择插件格式
如果你用的是jQuery UI Datepicker这类第三方日期选择插件,需要在初始化时指定格式和模型配置保持一致:
$('.datepicker').datepicker({ dateFormat: 'yy-mm-dd', // 保留你原有其他配置 });
验证排查
如果修改后还是不显示,可以在GET的Edit接口处打断点,确认查出来的WC_Inbox对象的Hire_Date、Injury_Date属性确实有有效值,排除数据库查询为空的问题。
内容的提问来源于stack exchange,提问作者GrillOwner69420
相关产品推荐
相关产品推荐

