【问题标题】:Double PostBack inside UpdatePanelUpdatePanel 内的双重回发
【发布时间】:2011-07-30 15:28:30
【问题描述】:

我遇到了 ASP.NET 触发按钮单击两次的问题。该按钮位于 UpdatePanel 内,但是当我单击它时,我会收到两次回发,然后单击两次按钮,然后两次调用我的 DAL(按此顺序)。我以前从未遇到过这种情况,将 AutoEventWireup 更改为 false 没有效果。我能想到的唯一解决方法是隐藏 Web 服务中的功能并处理 jQuery 的复杂性,我不想为小项目做这件事。

萤火虫转储如下(这些都发生在单击一次)。

【问题讨论】:

    标签: c# .net asp.net updatepanel postback


    【解决方案1】:

    将以下脚本放在 ScriptManager 之后的页面上。

    <script type="text/javascript"> 
    var postbackControl = null; 
    var parm = Sys.WebForms.PageRequestManager.getInstance(); 
    parm.add_beginRequest(BeginRequestHandler); 
    parm.add_endRequest(EndRequestHandler); 
    
    function BeginRequestHandler(sender, args) 
    { 
     postbackControl = args.get_postBackElement(); 
     postbackControl.disabled = true; 
    } 
    function EndRequestHandler(sender, args) 
    { 
    postbackControl.disabled = false; 
    postbackControl = null; 
    } 
    </script>
    

    【讨论】:

      【解决方案2】:

      可能是您已经将 jQuery click() 挂钩到按钮,该按钮也隐式内联挂钩到 ASP.NET 的 onchange?

      jQuery.change + inline onchange fn() causes fn to execute twice

      或者您是否检查过您是否已经两次挂钩服务器端处理程序,在标记中以声明方式和在代码隐藏中以命令方式连接?

      【讨论】:

        【解决方案3】:

        奇怪的是,这似乎是由一个狡猾的按钮控制适配器引起的,它在按钮标签内添加了一个跨度以使滑动门工作。

        【讨论】:

        • 这真的很烦人,我在适配器源中看不到任何可能出现这种情况的内容:pastebin.com/K9yxcFzE
        【解决方案4】:

        writer.AddAttribute(HtmlTextWriterAttribute.Type, "button");

        没有意义,但有效

        【讨论】:

        • 可以对那一行代码多解释一下
        猜你喜欢
        • 2017-12-28
        • 1970-01-01
        • 2017-05-13
        • 2011-06-19
        • 1970-01-01
        • 2014-11-04
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        相关资源
        最近更新 更多