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

C# Web Forms中无法获取日期输入框值的问题求助

ASP.NET ListView中日期输入控件值无法更新获取的问题解决

我之前在ASP.NET WebForms的ListView控件里嵌入了两个日期输入控件——一个是设置了TextMode="Date"的asp:TextBox,另一个是原生HTML的<input type="date">,结果遇到了非常棘手的问题:修改输入框内容后,后台始终获取不到新值——要么是空字符串,要么是初始设置的值,但页面上其他控件的值都能正常读取。

我试过了各种常规排查方法,都没解决:

  • 通过e.Item.FindControl获取控件实例,读取Text(ASP控件)或Value(HTML控件)属性,结果还是旧值/空值
  • 尝试用Request.Form结合控件的UniqueID、ClientID甚至直接用控件name去取,返回全是null,连Request.Form.AllKeys里都找不到这两个控件的键
  • 发现ASP控件没自动生成到designer.cs里,手动添加后依然获取到null
  • 所有控件都包裹在UpdatePanel中,其他控件的回发逻辑都正常,唯独日期控件出问题

后来查了相关问题,发现这大概率是ASP.NET WebForms对HTML5原生date类型控件的回发兼容性问题,尤其是在ListView这类数据绑定控件配合UpdatePanel使用时,控件的视图状态或表单提交数据没有被正确捕获,导致修改后的值无法传递到后台。

最后我换了个思路,放弃使用原生date类型控件,改用普通的asp:TextBox,然后通过JavaScript实现日期格式的输入约束,确保用户输入符合dd/mm/yyyy的格式,同时保证后台能正常获取到输入值。

用到的JavaScript函数如下:

function dateInputHandler(item, event) {
    // key code 8 == backspace
    if (event.keyCode != 8) {
        // insert forward slashes after days and months
        if (item.value.length == 2 || item.value.length == 5) {
            item.value = item.value + '/'
        }
        // remove double slashes and prevent length exceeding 10 characters
        // format should be dd/mm/yyyy
        if (item.value.endsWith("//") || item.value.length > 10) {
            item.value = item.value.slice(0, -1);
        }
    }
}

把这个函数绑定到文本框的onkeyup事件上,这样用户输入时会自动插入分隔符、限制长度,同时普通文本框的内容能正常通过回发传递到后台,完美解决了之前的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:01:25