0

2セットのコントロールがasp:TextBoxありasp:Button、1セットはアップデートパネルの内側に、もう1セットは外側にあります。

    <asp:UpdatePanel runat="server">
        <ContentTemplate>
            <asp:Button Text="text" runat="server" ID="btn1"/>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Button Text="text" runat="server" ID="btn2"/>
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

コードビハインド

    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox1.Text = TextBox2.Text;
    }

さて、私の質問は、Updatepanelがどの程度正確に機能しているかということです。

実際、btn1クリックすると、UpdatePanelのコンテンツのみが要求としてサーバーに送信され、応答はサーバーからそのupdatepanelのみに送信されると思いました。

そこで、TextBox2にテキストを入力してクリックしbtn1ましたが、意外とテキストが..のTextBox1ように変更されました。TextBox2

次に、ページ全体が要求としてサーバーに送信され、応答はそのupdatePanelにのみ送信され、それに応じて更新されると思いました。

ここで、Google Chromeデベロッパーツールで両方のリクエスト(つまり、リクエスト元btn1と)を確認しました。驚いたことに、リクエストbtn2には違いがあります。Content-Length

更新パネルの外側にさらに多くのコントロールがある場合はContent-Lengthbtn2

誰かがこれに光を当てることができますか。

4

1 に答える 1

0

わかりました..ページに UpdatePanel があっても、ポストバックが発生すると、すべてのコンテンツがサーバーにポストバックされます。これは、UpdatePanel のない通常のページのように動作します。それが、UpdatePanel のオプション UpdateMode がある理由です...

UpdateMode="Always"と UpdateMode ="Conditional"です。

ここでは何も設定していないため、デフォルトで常に常に設定されているため、ページ全体がポストバックされていました...

UpdatePanel を追加した後に探していた変更を確認するには、それを条件付きに設定し、要素を AsynPostbackTriggers として追加する必要があります ...

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btn1" />
    </Triggers>
    <ContentTemplate>
        <asp:Button Text="text" runat="server" ID="btn1"/>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </ContentTemplate>
</asp:UpdatePanel>
<asp:Button Text="text" runat="server" ID="btn2"/>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

btn1 をクリックすると、UpdatePanel 内のコンテンツのみがポストバックされ、応答で確認できるようになりました。

btn2 をクリックすると、UpdatePanel の外側のコンテンツのみが応答に表示されます。

于 2012-09-12T20:24:24.973 に答える