2014-02-06 5 views
3

У меня есть элемент управления ListView следующим образом (для размещения здесь я удалил значения из моего ItemTemplate):ASP.NET ListView пейджинга: Invalid ViewState

<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: Неверное состояние просмотра.

Я смог воспроизвести это как в моих браузерах, так и в IE8 и Chrome.

+0

Выглядит, что проблема связана с привязкой данных. Пожалуйста, укажите код сервера и исходный код. –

ответ

0

использовать 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

Надеюсь, это полезно

+0

Это работа, когда привязка данных правильная .... дайте некоторый код, поэтому я дам правильное решение, спасибо –