如何将DateTime类型的用户生日值填入ASP.NET日期文本框?
ASP.NET TextBox(TextMode="Date")绑定DateTime值的解决方法
核心问题原因
TextMode="Date"的ASP.NET TextBox会被渲染为HTML5原生的<input type="date">控件,这个控件**只接受ISO 8601格式(yyyy-MM-dd)**的字符串作为值,你设置的DateFormat和DisplayDateFormat对原生HTML5 date控件不生效——这两个属性仅适用于非Date模式的TextBox或部分第三方扩展控件。
具体解决步骤
1. 后台代码直接赋值
如果你的user.birthdate是DateTime类型,直接将其转换为yyyy-MM-dd格式的字符串赋值即可,注意处理可空DateTime的情况:
// 不可空DateTime的情况 BirthDateEdTB.Text = user.birthdate.ToString("yyyy-MM-dd"); // 可空DateTime?的情况 if (user.birthdate.HasValue) { BirthDateEdTB.Text = user.birthdate.Value.ToString("yyyy-MM-dd"); } else { BirthDateEdTB.Text = string.Empty; }
2. 数据绑定场景(Eval/Bind)
如果是通过数据绑定控件(如GridView、FormView)绑定值,同样要指定ISO格式:
<asp:TextBox ID="BirthDateEdTB" runat="server" MaxLength="50" TextMode="Date" class="form-control" required="required" Text='<%# Eval("birthdate", "{0:yyyy-MM-dd}") %>'> </asp:TextBox>
额外注意点
- 避免传入
DateTime.MinValue(0001-01-01),大部分浏览器无法识别这个日期,会显示为空或默认占位符 - 浏览器最终显示的日期格式由用户系统的区域设置决定,你无法通过ASP.NET属性强制修改,但只要传入的是ISO格式值,浏览器会自动转换为用户熟悉的格式显示
内容的提问来源于stack exchange,提问作者KK2007
相关产品推荐
相关产品推荐

