Примечание: Этот вопрос был полностью изменен, теперь у меня есть более простой пример.
Я настроил образец страницы, который имеет только ListView
и ObjectDataSource
.При первом открытии страницы (!IsPostBack
) мой метод GetList
вызывается один раз.После подкачки (IsPostBack
) метод GetList
вызывается дважды - первый раз со старыми значениями подкачки и второй раз с новыми значениями.
Если я установил EnableViewState="true"
на ListView
, то метод GetList
вызывается только один раз.Мне кажется, что ListView
хочет «начальное состояние», которое он получает либо из ViewState
, либо путем повторного запуска метода.
Есть ли способ отключить ViewState на ListView
а также предотвратить повторный вызов SelectMethod
?
Страница ASPX:
<asp:ListView ID="TestListView" runat="server" DataSourceID="ODS" EnableViewState="false">
<LayoutTemplate>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
<asp:DataPager ID="TestPager" runat="server" PageSize="10">
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
</LayoutTemplate>
<ItemTemplate>
<div><%# Eval("Title") %></div>
</ItemTemplate>
</asp:ListView>
<asp:ObjectDataSource ID="ODS" runat="server" SelectMethod="GetList" SelectCountMethod="GetListCount"
TypeName="Website.Test" EnablePaging="true" />
Код ASPX позади:
namespace Website
{
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public IList<DataItem> GetList(int maximumRows, int startRowIndex)
{
return GetListEnumerable().Skip(startRowIndex).Take(maximumRows).ToList();
}
public IEnumerable<DataItem> GetListEnumerable()
{
for (int i = 0; i < 100; i++)
{
yield return new DataItem { Title = i.ToString() };
}
}
public int GetListCount()
{
return 100;
}
}
public class DataItem
{
public string Title { get; set; }
}
}