【问题标题】:GridView PAGING inside UpdatePanel does not work for second page change, why?UpdatePanel 中的 GridView PAGING 不适用于第二页更改,为什么?
【发布时间】:2013-09-25 21:57:29
【问题描述】:

我有两个更新面板,其中一个包含一个网格视图。问题是分页仅在第一次正常工作。

这里是标记:

<asp:UpdatePanel ID="upAnswers" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
    <ContentTemplate>
        <asp:GridView ID="gvAnswers" runat="server" CssClass="gv" Width="100%" ShowHeader="false" AllowPaging="True" PageSize="2" EnableSortingAndPagingCallbacks="true" OnPageIndexChanging="gvAnswers_PageIndexChanging" AutoGenerateColumns="False" AlternatingRowStyle-BackColor="#eee">
            <Columns>
                <asp:TemplateField HeaderText="Questions" ShowHeader="False">
                    <ItemTemplate>
                        <asp:Label ID="lblQuestions" onclick=<%# Eval("FaqID", "$('.lblAnswers_{0}').toggle('fast')") %> CssClass="block" runat="server" Text='<%# Eval("Title") %>'></asp:Label>
                        <asp:Panel ID="pnlS1" runat="server" CssClass='<%# Eval("FaqID", "lblAnswers_{0}") %>' style="display: none;">
                            <asp:Label ID="Label1" runat="server" Text='<%# Eval("Question") %>' CssClass="block bold"></asp:Label>
                            <asp:Label ID="lblAnswers" runat="server" Text='<%# Eval("Answer") %>'></asp:Label>
                        </asp:Panel>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="upgAnswers" runat="server" AssociatedUpdatePanelID="upAnswers" DisplayAfter="300">
    <ProgressTemplate>
        <div id="uiBlock" class="uiBlock">
        </div>
    </ProgressTemplate>
</asp:UpdateProgress>

以及背后的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        GetAnsweredPublicFAQs();
    }
}

protected void GetAnsweredPublicFAQs()
{
    DataSet ds = cFAQs.getAnsweredPublicFAQs();

    gvAnswers.DataSource = ds;
    gvAnswers.DataBind();
}

protected void gvAnswers_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvAnswers.PageIndex = e.NewPageIndex;
    GetAnsweredPublicFAQs();
    gvAnswers.DataBind();
    upAnswers.Update();
}

作为参考,我使用 ASP.NET 4.0 C#。

我们将不胜感激。

问候, 卡多

【问题讨论】:

  • 您是否尝试过使用 UpdateMode="Always"?此外,放置 ChildrenAsTriggers 而不放置任何 Trigges 是没有用的,因为只要子控件进行回发,UpdateMode="Conditional" 的 UpdatePanel 就会更新。
  • 第二次发生了什么?您所说的只是分页仅在第一次时才能正常工作。
  • @jadarnel27 第二次什么都没发生。
  • @AlessioCavaleri:当我尝试 UpdateMode="Always" 时,即使是第一次也无法正常工作,没有任何错误。
  • 第二次点击PageIndexChanging事件了吗?此时 e.NewPageIndex 的值是多少?

标签: c# asp.net gridview updatepanel paging


【解决方案1】:

将您的 UpdatePanel 声明更改为这样开始:

<asp:UpdatePanel ID="upAnswers" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="gvAnswers" EventName="PageIndexChanging" />

每当我遇到这些UpdatePanels 的问题时,我发现明确声明触发器很有帮助。尤其是当您使用“非默认”事件来触发 AsyncPostBack 时(SelectedIndexChanged 是 GridView 的“默认”事件)。

此外,ChildrenAsTriggers 默认为 true,因此我将其从标记中删除。

【讨论】:

  • 不幸的是它没有用。和以前一样,当我转到第 2 页时,点击其他页码无济于事。
  • @rick_schott 嗨,你对我的问题有什么想法吗?
  • @Kardo 您页面其余部分的一般结构是什么?这个 UpdatePanel 是嵌套在另一个 UpdatePanel 中还是什么?
  • 页面其余部分很正常,有master的页面。没什么特别的。我尝试了许多不同的解决方案,例如启用或禁用页面或项目的视图状态,添加 ScriptManager sp = ScriptManager.GetCurrent(this);sp.RegisterAsyncPostBackControl(gvAnswers);到页面等...
  • 我在一个没有 master 的新空白 web 表单中尝试了 updatepanel 和 gridview,令人惊讶的是它运行得非常完美。现在我应该找出影响代码的因素。
猜你喜欢
  • 1970-01-01
  • 2012-05-11
  • 2012-07-23
  • 1970-01-01
  • 2021-04-07
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
相关资源
最近更新 更多