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 が起動され、メソッド 'refreshUP1' を起動する updatepanel up1 を更新することです。しかし、私の場合、すべての更新パネルが更新され、少なくともメソッド「refreshUP2」と「refreshUP3」が実行され、望ましくない動作が発生します...

どんなアプローチでも大歓迎です!!!

4

1 に答える 1

0

これはOnLoadイベントが原因です。

ポストバックが非同期であっても、ページ上のすべてのコントロールが読み込まれ、ライフサイクルを通過することを理解する必要があります。基本的に、UpdatePanel との違いは、そのコンテンツのみが AsyncPostBack のページに返されることです。

詳細については、これを参照してください 。ASP.NET での非同期および同期ポストバック

あなたがやりたいことをするために、refreshUPサブスクをOnLoadイベントにリンクするべきではありません。私がよく使用する解決策は、AsyncPostBackTrigger.

于 2012-07-24T13:22:44.997 に答える