You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET插入数据库时TextDate日期值被忽略 插入默认1990-01-01问题

ASP.NET Web Forms 日期插入数据库异常解决方案

问题根因

  • 前端TextDate控件在ASPX代码中声明了ReadOnly="true",ASP.NET Web Forms默认会阻止只读服务器控件的客户端修改值回发到后台,导致后台获取到的TextDate.Text为空值
  • 日历扩展控件CalendarExtender指定的日期格式为dd-MM-yyyy,直接使用Convert.ToDateTime解析时会依赖服务器的系统区域格式,若格式不匹配会解析失败,得到空值或者默认日期,插入数据库时触发字段默认值1990-01-01
  • 额外排查点:若Page_Load事件中未加!IsPostBack判断就给TextDate赋值,会在每次提交时覆盖前端传递的选中日期值

修复步骤

1. 修复只读控件值回发丢失问题

两种方案二选一:

  • 方案1:删除ASPX代码中TextDate控件的ReadOnly="true"属性,改为在后台Page_Load事件中添加只读标记,仅前端生效不影响后台取值:
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // 原有初始化逻辑保留
    }
    // 添加只读属性,前端无法手动输入,仅可通过日历控件选择
    TextDate.Attributes.Add("readonly", "readonly");
}
  • 方案2:直接移除ReadOnly属性,允许用户手动输入,配合日历控件选择即可

2. 修复日期格式解析错误问题

替换原有直接转换的代码,使用指定格式的日期解析方法,避免受服务器区域设置影响:

// 与CalendarExtender的Format属性保持一致的解析格式
if (DateTime.TryParseExact(TextDate.Text, "dd-MM-yyyy", 
    System.Globalization.CultureInfo.InvariantCulture, 
    System.Globalization.DateTimeStyles.None, 
    out DateTime selectedDate))
{
    myPara.Add("@decisionyear", selectedDate);
}
else
{
    // 可自行添加日期无效的提示逻辑
    myPara.Add("@decisionyear", DBNull.Value);
}

3. 额外检查项

确认Page_Load事件中所有给TextDate赋值的逻辑,都放在if(!IsPostBack)判断内部,避免回发时覆盖用户选择的日期。

内容的提问来源于stack exchange,提问作者user15602549

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 04:54:04