【问题标题】:Determine which update panel caused postback?确定哪个更新面板导致回发?
【发布时间】:2010-11-16 10:55:14
【问题描述】:

假设我有 3 个更新面板。我如何检测哪个更新面板导致 JavaScript 部分回发。

【问题讨论】:

  • 你的意思是你从javascript调用_dopostback(),在服务器端你想知道你调用的是哪个updatepanel的_dopostback()???
  • 您想在服务器端还是客户端知道这一点(如“来自 JavaScript”的建议)?

标签: .net ajax asp.net-ajax


【解决方案1】:

使用隐藏字段

在 javascript 中调用 _dopostback() 之前分配值,通过在服务器上您可以指定哪个更新面板是回发。

【讨论】:

    【解决方案2】:

    我有一个 Web 用户控件的自定义实现,其中我有一个绑定到该字段的管理器,然后我用一个属性标记了输入,以便我能够更容易地找到它 如果您找到一种方法来知道您拥有哪些 updatePanel,那么您也可以这样做

    这是一个简单的例子,它以这种方式工作的原因将是一个很长的解释,但我想把它留在这里以防有人发现它有用

    可能有bug,我急着离开,也许我今天晚些时候去测试一下

    如果你把它放在更新面板中,你应该会看到它工作

       <span id="foo" customattr="foo_msg">click for foo_msg</span>
    

    Finallu,我做的是这样的

    <html>
     <head>
     //make sure this executes on load
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myHandler);
    
    function MyManager(message){
     this.message=message;
     this.notify=function(){alert(this.message);}
    }
    
    $(
     function(){
      $("[customattr=Y]").each(
       function(){
        this.objAttr=new MyManager($(this).attr("customattr"));
        $.data(document.body,this.id,objAttr);
        $(this).click(
         function(){
          this.objAttr.notify();
         }
        )
       }
     }
    );
    
    function myHandler(a,b){
     $("[customattr]").each(
      function(){
       if(!this.objAttr){
        //smells like postback regenerated this field
    
        //let's get it back
        this.objAttr=$.data(document.body,this.id);
    
       }
      }
     );
    }
     </head>
     <body>
       <span id="foo" customattr="foo_msg">click for foo_msg</span>
       <span id="bar" customattr="bar_msg">click for bar_msg</span>
     </body>
    <html>
    

    【讨论】:

    • 我认为'in javascript' 意味着......在回发返回后
    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多