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

Type-Ahead Datalist Textbox点击Add后未重置,自定义开头匹配后列表无法恢复全量选项

问题根因
  • 新增成功后未清空水果输入框:VB后端btnAddStdFruit_Click方法的新增成功分支中,仅清空了起止时间输入框,没有清空txtAddStdFruit水果输入框的内容,输入框残留选中的Cherry值会触发筛选逻辑,自然只保留C开头的选项
  • 异步回发后JS全局变量未更新:页面首次加载时,你将全量datalist内容存储在Inputs.initialAddPanelFruitDataListContent、Controls.addPanelFruitOptions两个JS全局变量中,点击Add按钮是通过UpdatePanel做局部刷新,这两个变量不会自动更新,依然保留旧的筛选后的值,哪怕后端重新渲染了datalist,筛选逻辑依然基于错误的旧变量执行
  • 筛选逻辑直接修改DOM:当前的开头匹配逻辑直接改写datalist的innerHTML,输入值后会直接覆盖原始全量选项,没有正确回退的基准
修复步骤

1. 后端新增成功后清空水果输入框

在VB代码的btnAddStdFruit_Click方法中,找到ctrAddedFrts > 0的判断分支,添加清空水果输入框的逻辑:

If ctrAddedFrts > 0 Then
    ' 原有清空逻辑
    txtAddStart.Text = String.Empty
    txtAddStop.Text = String.Empty
    ' 新增:清空水果输入框
    txtAddStdFruit.Text = String.Empty
    
    ' 原有后续逻辑保持不变
    pnlValAddLocation.CssClass = Constants.VALIDATOR_PANEL_RESET_STYLE
    ResetStdRequestSet()
    ResetMenuFruitList()
    ResetStandardFruitList()
    BindLists()
    BindStdFruits()
    ' ... 其余代码无需修改

2. 监听异步回发事件重新初始化JS变量

在前端页面的脚本块中添加以下代码,监听UpdatePanel的异步回发完成事件,更新存储全量datalist的JS变量:

// 监听UpdatePanel异步回发完成事件
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() {
    // 重新获取最新渲染的datalist元素
    Controls.addPanelFruitDataList = document.getElementById('dlParentFruit');
    // 重新缓存全量选项列表
    Controls.addPanelFruitOptions = Controls.addPanelFruitDataList.querySelectorAll('option');
    // 重新缓存全量datalist的原始HTML
    Inputs.initialAddPanelFruitDataListContent = Controls.addPanelFruitDataList.innerHTML;
    // 主动触发一次筛选逻辑,输入框已清空会自动恢复全量选项
    Methods.addNewFruitsFruitListStartsWith(document.getElementById('<%= txtAddStdFruit.ClientID %>'));
});

完成以上两步即可解决问题,Add操作后datalist会自动恢复全量水果选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:36:01