UpdatePanel иногда обновляет всю страницу

Несмотря на то, что я использую панель обновлений, иногда вся моя страница обновляется, и я не могу понять, почему.

(Отредактировано с учетом ответа Джейсона П.)

Код главной страницы:

<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>

Код позади:

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();
    }
}

person dmr    schedule 08.05.2013    source источник


Ответы (1)


Не уверен, что это вся проблема, но элемент <Triggers> должен быть на том же уровне, что и элемент <ContentTemplate>, а не дочерний:

<asp:UpdatePanel>
    <Triggers>
        ...
    <Triggers>
    <ContentTemplate>
        ...
    <ContentTemplate>
</asp:UpdatePanel>

Кроме того, я считаю, что в этом случае триггером должен быть Repeater, а не LinkButton. Попробуйте удалить событие OnCommand из LinkButton и добавить его в Repeater, а также изменить триггер UpdatePanel.

person Jason P    schedule 08.05.2013