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