2012-07-17 98 views
1

我刚刚开始在stackoverflow,作为至少... 我很感激你对我遇到的有关AJAX的一些问题的帮助。 首先,我在工作之前实现了AJAX,但只在基本的东西上实现,例如通过button_onclick刷新的UpdatePanel。但现在我需要实现多个UpdatePanel,它们通过多种方式刷新。多个更新面板

我简化了我的HTML代码,但基本上它看起来像:

<script type="text/javascript"> 
    function mostrarDatosSolicitante() { 
     var nroDoc = document.getElementById('<%=txtDocumento.ClientID%>').value; 

     if (nroDoc != "") { 
      __doPostBack('<%=up1.ClientID%>', ''); 
     } 
    }   
</script> 
<table> 
    <tr> 
     <td> 
      <b>Documento </b> 
     </td> 
     <td> 
      <asp:TextBox runat="server" id="txtDoc" 
         onblur="mostrarDatosSolicitante()"/>      
     </td> 
     <td> 
      <asp:Button runat="server" id="btnConfirmar" 
         Text="Confirmar" /> 
     </td> 
    </tr>    
</table> 
<asp:ScriptManager ID="ScriptManager1" runat="server" 
        EnablePartialRendering="True" /> 
    <asp:UpdatePanel ID="up1" runat="server" 
        OnLoad="refreshUP1" UpdateMode="Conditional">    
     <ContentTemplate> 

      <!--some stuff--> 

     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:UpdatePanel ID="up2" runat="server" 
        OnLoad="refreshUP2" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnConfirmar" /> 
     </Triggers> 
     <ContentTemplate> 

       <!--some stuff 2--> 

      <asp:UpdatePanel ID="up3" runat="server" 
          OnLoad="refreshUP3" UpdateMode="Conditional"> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="ddlTipoConvInt" /> 
       </Triggers> 
       <ContentTemplate> 

        <!--some stuff 3--> 

       </ContentTemplate> 
      </asp:UpdatePanel> 

     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

而且我后面的代码看起来像:

protected void refreshUP1(object sender, EventArgs e) 
{ 
    //do something 
} 
protected void refreshUP2(object sender, EventArgs e) 
{ 
    //do something 
} 
protected void refreshUP3(object sender, EventArgs e) 
{ 
    //do something 
} 

,我需要解决的问题是,当我离开文本框,那么JavaScript会触发刷新updatepanel up1触发方法'refreshUP1'。但在我的情况下,所有的更新面板正在刷新,至少方法'refreshUP2'和'refreshUP3'运行,导致不希望的行为...

任何方法将受到欢迎!

回答

0

这是由OnLoad事件引起的。

您必须了解,无论Postback是否为异步,页面上的所有控件都会加载并执行生命周期。 Basicaly与UpdatePanel的区别在于,只有它的内容才会在AsyncPostBack的页面上返回。

你可以看看本作的更多信息: Asynchronous and synchronous postback in ASP.NET

做你想做的事,你不应该在refreshUP潜艇链接到OnLoad事件。我经常使用的解决方案是将它们中的每一个链接到隐藏按钮的单击事件,我将其设置为AsyncPostBackTrigger