Поблочное тестирование определенно стоит начальных инвестиций. Начиная с того, чтобы начинать использовать поблочное тестирование несколько лет назад, я нашел некоторую реальную выгоду:
Фрагменты кода могут быть большой справкой в сокращении издержек создания тестов. Не трудно создать отрывки, которые включают создание схемы класса и связанного приспособления модульного теста в секундах.
Проблема связана с привязкой к событию Page_Load
.
Чтобы это работало должным образом, привязка должна быть происходит в событии DataPager
OnPreRender
, а не в Page_Load
.
Источник:
<asp:DataPager ID="ListPager" PagedControlID="MyList" runat="server" PageSize="10"
OnPreRender="ListPager_PreRender">
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
Скрытый код:
protected void Page_Load(object sender, EventArgs e)
{
//Binding code moved from Page_Load
//to the ListView's PreRender event
}
protected void ListPager_PreRender(object sender, EventArgs e)
{
MyList.DataSource = GetSomeList();
MyList.DataBind();
}
Я столкнулся с той же проблемой, но привязка каждый раз при предварительной визуализации датапейджера не подходила для меня. Вместо этого я мог сделать почти то же самое, привязав только к пейджингу. Это решение можно использовать как альтернативу решению Андреаса для предварительной визуализации. У меня сработало следующее:
Прикрепившись к событию ListView PagePropertiesChanged, я смог исправить проблему разбиения на страницы без привязки к каждой предварительной визуализации пейджера данных.
ПРИМЕЧАНИЕ: Большая часть пейджера данных свойства настраиваются в файле скина, поэтому их нет в разметке.
Разметка:
<asp:DataPager ID="ListPager" runat="server" PagedControlID="MyList" />
<asp:ListView ID="MyList" runat="server">
<% //LayoutTemplate and ItemTemplate removed for the example %>
</asp:ListView>
Отложенный код:
protected void Page_Load(object sender, EventArgs e) {
MyList.PagePropertiesChanged += new EventHandler(MyList_PagePropertiesChanged);
}
/// <summary>
/// Handles the situation where the page properties have changed. Rebind the data
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MyList_PagePropertiesChanged(object sender, EventArgs e) {
MyList.DataSource = GetSomeList();
MyList.DataBind();
}