ASP.NET MVC页面加载时datetime-local控件不显示值问题
问题解决:ASP.NET MVC datetime-local输入框不显示绑定值
问题根源
你犯了两个关键错误:
- 同时使用
asp-for和手动value属性:asp-for标签助手会自动根据模型的DisplayFormat生成符合要求的value值,但你手动添加的value="@Model.DataPublicacao"会覆盖这个自动生成的内容,而直接输出的模型值用的是默认日期格式,不是datetime-local输入框要求的ISO格式,导致浏览器无法识别。 - 格式字符串可能超出浏览器兼容范围:datetime-local输入框的标准有效值格式是
yyyy-MM-ddTHH:mm(仅到分钟),部分浏览器不支持带秒的格式,你配置的{0:yyyy-MM-dd'T'HH:mm:ss}可能导致兼容性问题。
修正步骤
1. 调整模型的格式配置(可选,提升兼容性)
把格式字符串改成不带秒的版本,适配大多数浏览器:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd'T'HH:mm}")] public DateTime DataPublicacao { get; set; } [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd'T'HH:mm}")] public DateTime DataUltimaAlteracao { get; set; }
如果业务必须保留秒,也可以保留原格式,但要测试目标浏览器是否支持。
2. 移除视图中手动添加的value属性
让asp-for自动处理值绑定:
<div class="grid-duas-colunas"> <div class="form-group div-autor-1 col-4"> <label asp-for="DataPublicacao" class="control-label"></label> <input asp-for="DataPublicacao" class="form-control" /> <span asp-validation-for="DataPublicacao" class="text-danger"></span> </div> <div class="form-group div-autor-2 col-4"> <label asp-for="DataUltimaAlteracao" class="control-label"></label> <input asp-for="DataUltimaAlteracao" class="form-control" /> <span asp-validation-for="DataUltimaAlteracao" class="text-danger"></span> </div> </div>
原理说明
asp-for标签助手会自动读取模型上的DisplayFormat属性,将日期值转换成datetime-local输入框能识别的ISO格式,同时完成双向绑定。手动添加value会破坏这个自动处理流程,导致值格式不符合浏览器要求,所以即使元素属性里有值,输入框也不会展示。
内容的提问来源于stack exchange,提问作者Leonardo Silva
相关产品推荐
相关产品推荐

