0

我有一个与我的 ListView 一起使用的 DataPager 控件,当页面加载时,寻呼机显示第一页、下一页、最后一页、前一页和 10 页,但是当我单击页面的任何按钮或超链接时,没有任何反应,没有无论我点击多少次。我听说你必须在 preredender 中做一些事情,但没有看到任何关于它是如何工作的代码。谁能告诉我我应该在 prerender 中放入什么代码(以及如何调用 prerender),如果这是解决方案,如果不是如何让我的 datapager 工作?

<asp:UpdatePanel ID="upSearchResults" runat="server">
    <ContentTemplate>

        <asp:Label ID="lblErrorMSG" CssClass="ErrorText" runat="server" />

        <asp:Panel ID="plSearchResults" runat="server">
            <table  style="width: 100%" border="1">
                <tr>
                    <td>
                        <asp:Literal ID="lblTitleRow" runat="server" />
                    </td>
                    <td>
                        <asp:Literal ID="lblDescriptionRow" runat="server" />
                    </td>
                    <td class="TableSelectButton">
                        <asp:Button ID="btnAddNewItem" Text="Select" runat="server" />
                    </td>
                </tr>

                <asp:ListView ID="lvSearchResults"  runat="server">

                    <LayoutTemplate>
                        <tr id="itemPlaceHolder" runat="server" />
                    </LayoutTemplate>

                    <ItemTemplate>
                        <tr>
                            <td>
                                <%#Eval("Title")%>
                            </td>
                            <td>
                                <%#Eval("Descript")%>
                            </td>
                            <td class="TableSelectButton">
                                <asp:Button ID="btnEditItem" Text="Select" PostBackUrl='<%#String.Format("{0}.aspx?ID={1}&SectionID={2}", Eval("PageName"), Eval("ID"), ddlMediaTitle.SelectedValue.ToString())%>' runat="server" />
                            </td>
                        </tr>
                    </ItemTemplate>

                </asp:ListView>
            </table>
        </asp:Panel>

        <div class="Center">
            <asp:DataPager ID="dpSearchResults" PagedControlID="lvSearchResults" PageSize="10" runat="server"> 
                <Fields> 
                    <asp:NextPreviousPagerField ButtonType="Button" ShowNextPageButton="false" ShowFirstPageButton="true" ShowLastPageButton="false" ShowPreviousPageButton="true" /> 
                    <asp:NumericPagerField ButtonCount="10" /> 
                    <asp:NextPreviousPagerField ButtonType="Button" ShowNextPageButton="true" ShowFirstPageButton="false" ShowLastPageButton="true" ShowPreviousPageButton="false" /> 
                </Fields> 
            </asp:DataPager>
        </div>

    </ContentTemplate>

    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnSearch" EventName="Click" />
    </Triggers>

</asp:UpdatePanel>
4

3 回答 3

2

通过做两件事,我能够让您的代码示例正常工作。首先在列表视图控件中,我添加了 OnPagePropertiesChanged 事件并再次绑定数据。

<asp:ListView ID="lvSearchResults"  runat="server" 
    OnPagePropertiesChanged="lvSearchResults_PagePropertiesChanged">

在后面的代码中:

protected void lvSearchResults_PagePropertiesChanged(object sender, EventArgs e)
{
    //bind the lvSearchResults
}

为了让更新面板工作,我使用了这个触发器:

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="lvSearchResults"
        EventName="PagePropertiesChanged" />
</Triggers>

我的一项建议是在一切正常后绝对最后添加更新面板。它们似乎隐藏了很多问题,使它们更难解决。

享受!

于 2012-09-11T03:33:23.470 回答
0

我相当确定列表视图控件是无法在更新面板控件中使用的已知控件之一。通过暂时删除更新面板标签来测试这一点。

于 2012-09-11T02:18:06.123 回答
0

如果使用 plSearchResults.DataSource = .??? 以编程方式归档列表视图数据。,所以它被称为你页面中的每个回发......包括异步的。

并且 DataSource 对象必须实现寻呼机回调。

因此,为您提供解决方案。(如果我假设正确)是:在这样的代码中添加一行..

if(!isPostBack) //This line will assure tha the binding will be filled just once
    plSearchResults.DataSource = .???. 

然后它不会重新绑定每个回发...并确保分页的回调在 DataSource 对象上实现

Asp.NET 数据源对象,如 SQLDataSource、LinqDataSource、EntitiesDataSource……它们都实现了分页。如果您以编程方式创建一个数据源,则必须实现分页回调。

于 2012-09-11T03:25:50.470 回答