ASP.NET WebForms中TextMode=Date的TextBox日期被覆盖问题求助
解决ASP.NET WebForms/MVC中Date控件绑定日期被覆盖的问题
这个问题我之前踩过一模一样的坑!核心原因很明确:浏览器原生的<input type="date">控件(也就是ASP.NET里TextMode="Date"对应的渲染结果)只认ISO 8601标准的日期格式(yyyy-MM-dd),如果你的绑定输出是其他格式(比如你ItemTemplate里用的dd/MM/yyyy),控件会因为无法识别日期值,自动清空或者重置成默认状态,看起来就像是被“覆盖”了。
具体解决步骤:
1. 修正WebForms EditTemplate中的绑定格式
直接在TextBox的Bind表达式里显式指定ISO格式,确保服务器输出的日期字符串是控件能识别的:
<asp:TextBox Text='<%# Bind("FechaEventoInicio", "{0:yyyy-MM-dd}") %>' runat="server" ID="FechaEventoInicioTextBox" CssClass="form-control" TextMode="Date"/>
这样不管你服务器端的文化设置是什么,都会输出yyyy-MM-dd格式的日期,控件能正确加载值;当你提交表单时,WebForms的模型绑定会自动把ISO格式的字符串转换回DateTime对象,完全不影响存入数据库。
2. 验证渲染后的HTML(调试小技巧)
修改后可以右键查看页面源码,检查这个TextBox对应的HTML:
<input type="date" id="..." class="form-control" value="2024-05-20">
只要value属性是yyyy-MM-dd格式,就说明绑定正确了,控件也能正常显示和编辑日期。
3. MVC5场景的同理解决
你提到MVC5脚手架表单也有相同问题,解决思路完全一致,在TextBoxFor里指定格式即可:
@Html.TextBoxFor(m => m.FechaEventoInicio, "{0:yyyy-MM-dd}", new { @class = "form-control", type = "date" })
4. 关于文化设置的补充(可选)
如果你的项目全局使用非en-US文化(比如西班牙语),可以在Web.config里配置全球化设置,但这只是辅助,核心还是要保证Date控件的value是ISO格式:
<system.web> <globalization culture="es-ES" uiCulture="es-ES" /> </system.web>
亲测这个方案在Chrome、Edge、Firefox里都能完美解决问题,你可以试试!
内容的提问来源于stack exchange,提问作者voteforpedro
相关产品推荐
相关产品推荐

