【问题标题】:Confirm DropDownList selected value确认 DropDownList 选择的值
【发布时间】:2011-04-28 17:27:43
【问题描述】:

当用户尝试更改 DropDownList 的选定项目时,我想向用户显示一个确认对话框。如果确认选择,我想执行一些服务器端代码。

比如说,DDL 的值是 1 和 2。

  • 选择值 1(默认)。
  • 用户选择值 2。出现确认对话框。
  • 如果用户选择“是”,则所选项目会更改。必须执行一些服务器端代码。
  • 如果用户选择“否”,则所选项目将恢复为值 1。不执行服务器端代码。

我在这个问题上遇到了很多麻烦,因为 DDL 几乎没有可用的事件。

目前为止

this.MyDropDown.Attributes["onChange"] = @"return confirm('Are you sure?');";

event handler 用于服务器端代码的 DDL 的 SelectedIndexChanged 事件。

但我无法停止(或恢复)正在更改的项目,也无法触发 SelectedIndexChanged 事件。

有什么建议吗?

【问题讨论】:

    标签: asp.net drop-down-menu


    【解决方案1】:

    它没有触发服务器端事件的原因是因为您正在清除会触发回发的内置 webforms 事件处理程序。至于恢复值,你需要保存它然后重新加载它。

    添加这个javascript函数

    function handleChange(opt) {
        if (!confirm('are you sure')) {
            opt.selectedIndex = opt.oldIndex;
        }
        else {
            __doPostBack('MyDropDown','')
        }
    }
    

    并像这样设置客户端事件

    this.MyDropDown.Attributes["onChange"] = "handleChange(this)";
    this.MyDropDown.Attributes["onFocus"] = "this.oldIndex = this.selectedIndex";
    

    【讨论】:

    • 太棒了!!!这正是我所需要的。确保在使用此选项时关闭 AutoPostBack = True,因为 else 子句会为您执行此操作。
    【解决方案2】:

    这是完整的解决方案,因为我已经使用过了。只需参考以下说明:

    // Paste it in Aspx file
    function handleChange(opt) {
        if (!confirm('Are you sure?')) {
            opt.selectedIndex = opt.oldIndex;
        }
        else {
            __doPostBack('MyDropDown','')
        }
    }
    

    将此粘贴​​到 IsPostBack 之外的 Page Load 事件中:

    this.MyDropDown.Attributes["onChange"] = "handleChange(this)";
    this.MyDropDown.Attributes["onFocus"] = "this.oldIndex = this.selectedIndex";
    

    注意:将下拉列表的 AutoPostBack Proerty 设置为 False。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-05
      • 2013-10-19
      • 2013-09-17
      • 2011-03-17
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多