I recently started looking into AJAX and I am doing the following:
I have a repeater (dummydata) that is bound to a datatable (Articles).
Each ItemTemplate in the repeater has an Label control that is showing
ArticleName and an UpdatePanel. The UpdatePanel contains another
Repeater. I also have a button above the repeater. Each UpdatePanel
has an AsyncPostBackTr igger setup to my Button with EventName Click.
What I want to happen is the following: The button is clicked and all
the UpdatePanels call a webservice passing the ArticleName with the
infromation from the Label. The webservice then returns a datatable
that is bound to the repeater within each UpdatePanel.
ASPX Code below:
My Button Code is listed below:
protected void UpdateAllButton _Click(object source, EventArgs e)
{
Button button = source as Button;
Repeater dummyData =
(Repeater)butto n.Parent.FindCo ntrol("DummyDat a");
foreach (RepeaterItem i in dummyData.Items )
{
Repeater repeater1 = (Repeater)i.Fin dControl("Repea ter1");
Label articleLabel = (Label)i.FindCo ntrol("ArticleL abel");
ArticleFinderWe bService t = new ArticleFinderWe bService();
repeater1.DataS ource = t.FindArticle(a rticleLabel.Tex t);
repeater1.DataB ind();
}
}
<asp:ScriptMana ger ID="ScriptManag er1" runat="server">
<Services>
<asp:ServiceRef erence
Path="TrackFind erWebService.as mx" />
</Services>
</asp:ScriptManag er>
<br />
<asp:Button ID="UpdateAllBu tton" runat="server" Text="Button"
OnClick="Update AllButton_Click " /><br />
<asp:Repeater ID="DummyData" runat="server">
<ItemTemplate >
<table>
<tr>
<td width="300"><as p:Label ID="ArticleLabe l"
runat="server" Text='<%# Bind("Article") %>'></asp:Label></td>
</tr>
</table>
<asp:UpdatePane l ID="InnerUpdate Panel" runat="server"
UpdateMode="Con ditional">
<ContentTemplat e>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate >
<table>
<tr>
<td width="20">
<asp:CheckBox
ID="ArticleChec kBox" runat="server" Checked='<%# Bind("Checked") %>' /
></td>
<td width="250">
<asp:Label ID="lblArticle "
runat="server" Text='<%# Bind("Article") %>'></asp:Label><br />
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate >
<Triggers>
<asp:AsyncPostB ackTrigger
ControlID="Upda teAllButton" EventName="Clic k" />
</Triggers>
</asp:UpdatePanel >
</ItemTemplate>
<SeparatorTempl ate>
<hr />
</SeparatorTempla te>
</asp:Repeater>
Now this code works fine but I have a few questions:
1. Is this the right way to do it? I guess I get confused when I use
ServerSide events to execute AJAX calls.
2. Let's assume I want a few webservices to be called (each webservice
grabs information about the article but from different sources on the
internet. Would it be better to use one webservice to go out and
collect data from different locations, put it in a datatable then
return it to the repeater in the updatepanel OR add another webservice
method and add another updatepanel in the ItemTemplate then have each
UpdatePanel call a different webmethod? I was thinking the latter
approach since everything will happen at the same time, and if one
webservice finishes before the other, that data will be displayed on
the page right away instead of having to wait and gather all the data
then present it.
Any feedback would be greatly appreciated.
Thanks