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 :
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
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>
Dans le but de comprendre la méthode RegisterAsyncPostBackControl(Control), je cherche à coder le comportement suivant, par programme :
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) { }
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 :
et le même code behind que précédemment.
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>
Façon n°2 : utilisation de la méthode Update() dans le code behind :
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 <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>
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 :
Est il possible de faire ce que j'ai mis en commentaire de cette façon ?
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) { }
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.
Partager