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
相关产品推荐
相关产品推荐

