Я делаю веб-сайт для моего проекта колледжа.
Проект - это веб-сайт, который получает все от веб-сервиса.
Может кто-нибудь сказать, что происходит, и как я могу это исправить?
На одной из моих страниц у меня есть элемент управления ListView для отображения товаров и пейджер на той же странице.
На первый раз страница отображается хорошо и все отображается. Когда я нажимаю на NextPage на Pager, его страница перезагрузки, но не отображает вторую страницу, скорее отображает те же данные, если я нажимаю еще раз, я получаю:
Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.
Моя страница продуктов я тихо просто:
<asp:ListView ID="lv_ProductList" runat="server" DataKeyNames="product_id">
<LayoutTemplate>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
<br />
<br />
<asp:DataPager ID="pageTopics" runat="server" PageSize="8" PagedControlID="lv_ProductList" >
<Fields>
<asp:NextPreviousPagerField ShowFirstPageButton="false" ShowPreviousPageButton="true" ShowNextPageButton="false" ButtonCssClass="span" />
<asp:NumericPagerField />
<asp:NextPreviousPagerField ShowFirstPageButton="false" ShowPreviousPageButton="false" ShowNextPageButton="true" ShowLastPageButton="false" />
</Fields>
</asp:DataPager>
</LayoutTemplate>
<ItemTemplate>
<div class="item">
<img src="images/pic_1.jpg" width="91" height="105" alt="iPod" class="left" />
<h3><a href="http://www.justwebtemplates.com"><%# Eval("product_name") %></a></h3>
<p><%# Eval("product_desc").ToString().Substring(0,90) + "..." %> </p>
<div><a href="http://www.freewebsitetemplates.com" class="details">details</a> <a href="http://www.freewebsitetemplates.com" class="addtocart">add to cart</a></div>
<div class="divider"></div>
</div>
</ItemTemplate>
<EmptyDataTemplate>No products found</EmptyDataTemplate>
<EmptyItemTemplate>No products found</EmptyItemTemplate>
</asp:ListView>
И в коде позади:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
getProductsList();
}
}
public void getProductsList()
{
Store.Service myProducts = new Store.Service();
var products = myProducts.getProductList();
lv_ProductList.DataSource = products;
lv_ProductList.DataBind();
}
и в веб-сервисе:
[WebMethod]
public List<ws_product> getProductList()
{
using (DataClassesDataContext myProducts = new DataClassesDataContext())
{
var productList = from p in myProducts.ws_products
select p;
return productList.ToList();
}
}
Может кто-нибудь сказать, что происходит?
Также, если я вывожу Пейджер за пределы ListView, я не получаю сообщение об ошибке, однако, если я нажму на ссылку на следующую страницу, он отобразит тот же набор данных.
Как мне это исправить?
Заранее спасибо.