Bonjour,


Comme écrit dans le titre, je cherche à comprendre l'intérêt de la méthode RegisterAsyncPostBackControl(Control) de l'objet ScriptManager

Voici ma page aspx :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ Page Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeFile="PageTestUpdatePanel.aspx.cs" Inherits="TEST_PageTestUpdatePanel" %>
 
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
 
<asp:Content ID="Content2" ContentPlaceHolderID="Left" Runat="Server">
 
    <div>
        <asp:UpdatePanel runat="server" ID="uPanelA" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button runat="server" ID="buttonA" Text="clic on button A" OnClick="buttonA_Click" />
                <asp:TextBox runat="server" ID="textboxA"></asp:TextBox>
            </ContentTemplate>
        </asp:UpdatePanel>
 
        <asp:UpdatePanel runat="server" ID="uPanelB" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button runat="server" ID="buttonB" Text="clic on button B" OnClick="buttonB_Click" />
                <asp:TextBox runat="server" ID="textboxB"></asp:TextBox>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
 
</asp:Content>
avec le code behind associé suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
    protected void Page_Load(object sender, EventArgs e)
    {
    }
 
    protected void buttonA_Click(object sender, EventArgs e)
    {
        textboxA.Text = "testA";
        textboxB.Text = "testB";
    }
    protected void buttonB_Click(object sender, EventArgs e)
    {
    }
Dans le but de comprendre la méthode RegisterAsyncPostBackControl(Control), je cherche à coder le comportement suivant, par programme :
Je veux que quand je clique sur buttonA, uPanelB soit rafraichit.
(Dans le code ci dessus, uPanelB N'EST PAS mis à jour)

J'arrive déjà à faire cela de 2 façons :
Façon n°1 : en ajoutant de façon déclarative une balise asp:AsyncPostBackTrigger :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        <asp:UpdatePanel runat="server" ID="uPanelA" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button runat="server" ID="buttonA" Text="clic on button A" OnClick="buttonA_Click" />
                <asp:TextBox runat="server" ID="textboxA"></asp:TextBox>
            </ContentTemplate>
        </asp:UpdatePanel>
 
        <asp:UpdatePanel runat="server" ID="uPanelB" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button runat="server" ID="buttonB" Text="clic on button B" OnClick="buttonB_Click" />
                <asp:TextBox runat="server" ID="textboxB"></asp:TextBox>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="buttonA" />
            </Triggers>
        </asp:UpdatePanel>
et le même code behind que précédemment.

Façon n°2 : utilisation de la méthode Update() dans le code behind :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
        <asp:UpdatePanel runat="server" ID="uPanelA" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button runat="server" ID="buttonA" Text="clic on button A" OnClick="buttonA_Click" />
                <asp:TextBox runat="server" ID="textboxA"></asp:TextBox>
            </ContentTemplate>
        </asp:UpdatePanel>
 
        <asp:UpdatePanel runat="server" ID="uPanelB" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button runat="server" ID="buttonB" Text="clic on button B" OnClick="buttonB_Click" />
                <asp:TextBox runat="server" ID="textboxB"></asp:TextBox>
            </ContentTemplate>
        </asp:UpdatePanel>
associé au code behind suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
    protected void Page_Load(object sender, EventArgs e)
    {
    }
 
    protected void buttonA_Click(object sender, EventArgs e)
    {
        textboxA.Text = "testA";
        textboxB.Text = "testB";
	uPanelB.Update();
    }
    protected void buttonB_Click(object sender, EventArgs e)
    {
    }


J'aimerais maintenant arriver à le faire d'une 3ème façon avec la méthode RegisterAsyncPostBackControl(Control) ...

Moi je me dis il faudrait faire comme ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    protected void Page_Load(object sender, EventArgs e)
    {
        ScriptManager sm1 = Page.Master.FindControl("ScriptManager1") as ScriptManager;
        sm1.RegisterAsyncPostBackControl(buttonA); // Ca sert à quoi de faire ça ?
		// buttonA déclenche déjà un postBack asynchrone de uPanelA !!
		// Moi ce que je cherche à faire c'est de dire : "buttonA, déclenche moi aussi le postback asynchrone de uPanelB"
		// Là pour moi cette méthode aurait de l'intérêt. Il me faudrait un second argument dans cette méthode où on mettrait les zones cibles à rafraîchir.
    }
 
    protected void buttonA_Click(object sender, EventArgs e)
    {
        textboxA.Text = "testA";
        textboxB.Text = "testB";
    }
    protected void buttonB_Click(object sender, EventArgs e)
    {
    }
Est il possible de faire ce que j'ai mis en commentaire de cette façon ?
Et sinon, OK, mais pouvez vous m'expliquez l'intérêt de la méthode RegisterAsyncPostBackControl(Control) ?
Dans quel cas peut on l'utiliser de manière utile ?


Merci de votre aide.