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 被触发刷新更新面板 up1 触发方法“refreshUP1”。但在我的情况下,所有更新面板都在刷新,至少方法“refreshUP2”和“refreshUP3”运行,导致不希望的行为......

任何方法都将受到欢迎!!!

4

1 回答 1

0

这是由OnLoad事件引起的。

你必须明白,无论 Postback 是 Async,页面上的所有控件都会被加载并经历一个生命周期。基本上,与 UpdatePanel 的区别在于 AsyncPostBack 的页面上仅返回其内容。

您可以查看此以获取更多信息: ASP.NET 中的异步和同步回发

要做你想做的事,你不应该将refreshUP潜艇链接到OnLoad事件。我经常使用的解决方案是将它们中的每一个链接到我设置为AsyncPostBackTrigger.

于 2012-07-24T13:22:44.997 回答