asp.net - UpdatePanel 有时会刷新整个页面

标签 asp.net ajax updatepanel asp.net-3.5 page-refresh

即使我使用更新面板,有时我的整个页面都会刷新,但我不明白为什么。

(进行编辑以考虑 Jason P 的回答。)

母版页代码:

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

最佳答案

不确定这是否是整个问题,但<Triggers>元素应与 <ContentTemplate> 处于同一级别元素,而不是子元素:

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

此外,我相信在这种情况下,Repeater 应该是触发器,而不是 LinkBut​​ton。尝试从 LinkBut​​ton 中删除 OnCommand 事件并将其添加到 Repeater 中,并更改 UpdatePanel 的触发器。

关于asp.net - UpdatePanel 有时会刷新整个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448757/

相关文章:

asp.net - 存储数据以供客户端导出。我有一团糟

c# - 需要数据库结构的建议(MS SQL/MySQL)

javascript - Google map 信息窗口未显示

c# - 在 mvc 3 中为嵌套类的 CRUD 创建模型/ View

asp.net - 当更新面板位于主页中时保持滚动位置

C# Dropdownlist OnSelectedIndexChanged 未触发

javascript - 设置后缩略图 wp-ajax 返回 0

jquery - 为什么 jQuery 坚持我的纯文本不是 "well-formed"?

javascript - 消失的复选标记之谜

javascript - 除了服务器端回调之外,我如何调用 javascript 函数?