我有一个ListView控件,如下所示(为了发布在这里,我从ItemTemplate中删除了这些值):

<asp:ListView ID="ListView1" runat="server" DataSourceID="MyDataSource">
  <LayoutTemplate>
     <div id="requests" runat="server">
        <asp:Panel runat="server" id="itemPlaceholder"></asp:Panel>
     </div>
     <asp:DataPager runat="server" ID="DataPager" PageSize="3">
        <Fields>
            <asp:NumericPagerField ButtonCount="10" PreviousPageText="<--" NextPageText="-->" />
        </Fields>
     </asp:DataPager>
  </LayoutTemplate>
  <ItemTemplate>
     <div ID="itemPlaceholder" class="request" runat="server">
        <asp:LinkButton ID="button" runat="server" Text='...' CommandName="..."
                CommandArgument='...' OnClick="..."
                style="...">
        </asp:LinkButton> -
     </div>
  </ItemTemplate>
</asp:ListView>

该ListView作为用户控件(.ascx)存在,我已将其嵌入到ASPX网页中。
正如我所期望的,当网页加载时,对于9个项目的列表,我得到3个项目的3页。
当我单击以转到下一页时,该页面将正确加载下一组项目……但仅需一秒钟。然后发生了一件奇怪的事情。该页面将其自身的副本嵌入页面内6次,每一次都在页面内表单的一个字段下方。
如果随后我尝试转到下一页或上一页,则会出现ASP.NET服务器错误:

该页面的状态信息无效,并且可能已损坏。

在堆栈跟踪中,它显示以下错误:

FormatException:输入不是有效的Base-64字符串,因为它包含一个非基本字符,两个以上的填充字符或填充字符中的一个非空白字符。
ViewStateException:无效的viewstate。

我能够在IE8和Chrome浏览器上复制该文件。

最佳答案

您使用listview事件OnPagePropertiesChanging

像这样

 <asp:ListView ID="lvCustomers" runat="server"   GroupPlaceholderID="groupPlaceHolder1"
ItemPlaceholderID="itemPlaceHolder1"    OnPagePropertiesChanging="OnPagePropertiesChanging">


在aspx.cs中

protected void OnPagePropertiesChanging(object sender,PagePropertiesChangingEventArgs e)
{
    (lvCustomers.FindControl("DataPager1") as  DataPager).SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
this.BindListView();
}


BindListView()是绑定列表视图的方法

visit this link for example

我希望这会有所帮助

关于asp.net - ASP.NET ListView分页:无效的viewstate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21601375/

10-16 09:58