Comprendre à quoi sert ScriptManager.RegisterAsyncPostBackControl(Control)
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:
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:
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:
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:
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:
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:
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.