Reputation: 22323
Even though I am using an update panel, sometimes my entire page is refreshed, and I can't figure out why.
(Edited to take into account Jason P's answer.)
Masterpage code:
<form runat="server" id="form1">
<asp:ScriptManager ID="ScriptManager1" runat="server" enablePartialRendering="true" />
<h1>Title</h1>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional" childrenAsTriggers="true">
<ContentTemplate>
<ul class="letterLinks">
<asp:Repeater runat="server" ID="Letter_Repeater">
<ItemTemplate>
<li id='<%#Eval("Letter")%>'>
<asp:LinkButton runat="server" ID="UpdateLink" Text="My Text"
CommandName="BookLetter" CommandArgument='<%#Eval("Letter")%>' OnCommand="LoadBookTitles"/>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
<ul class="BookList">
<asp:Repeater runat="server" ID="Title_Repeater">
<ItemTemplate>
<li><a href='<%#Eval("URL")%>'><%#Eval("Title")%></a></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</ContentTemplate>
</asp:UpdatePanel>
</form>
Code Behind:
public partial class MyBooks : System.Web.UI.MasterPage
{
private GetAllBookInfo setMyInfo = new GetAllBookInfo();
private DataTable allTitleInfo = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
List<string> lettersWithBooks = new List<string>();
DataTable letterLinks = new DataTable();
// Get all letters that have Books
lettersWithBooks = setMyInfo.LettersWithBooks();
// get properties for ABC links
letterLinks = GetLetterLinkProperties(lettersWithBooks);
// Bind abc link data to the ABC repeater
Letter_Repeater.DataSource = letterLinks;
Letter_Repeater.DataBind();
allTitleInfo = setMyInfo.GetBookTitles(lettersWithBooks[0]);
// Bind title info data to title repeater
Title_Repeater.DataSource = allTitleInfo;
Title_Repeater.DataBind();
}
private DataTable GetLetterLinkProperties(List<string> letters)
{
DataTable letterLinks = new DataTable();
letterLinks.Columns.Add("Letter", typeof(string));
letterLinks.Columns.Add("Class", typeof(string));
letterLinks.Columns.Add("Enabled", typeof(bool));
for (char c = 'A'; c <= 'Z'; c++)
{
if (letters.Any(letter => letter == c.ToString()))
{
letterLinks.Rows.Add(c, "hasGuides", true);
}
else
{
letterLinks.Rows.Add(c, "noGuides", false);
}
}
return letterLinks;
protected void LoadBookTitles(object sender, EventArgs e)
{
LinkButton letterLink = (LinkButton)sender;
allTitleInfo = setMyInfo.GetBookTitles(letterLink.CommandArgument as String);
// Bind title info data to title repeater
Title_Repeater.DataSource = allTitleInfo;
Title_Repeater.DataBind();
}
}
Upvotes: 2
Views: 900
Reputation: 27012
Not sure if this is the entire problem, but the <Triggers>
element should be on the same level as the <ContentTemplate>
element, not a child:
<asp:UpdatePanel>
<Triggers>
...
<Triggers>
<ContentTemplate>
...
<ContentTemplate>
</asp:UpdatePanel>
Also, I believe in this case, the Repeater should be the trigger, not the LinkButton. Try removing the OnCommand event from the LinkButton and adding it to the Repeater, and changing the UpdatePanel's Trigger.
Upvotes: 2