2 ページの ASP.NET (PageA.aspx と PageB.aspx) を取得しました。各ページには複数のレコード (約 7000) を表示できます。7000 レコードすべてを表示する代わりに、ページ番号を表示する独自のナビゲーション クラスを作成しました。(Page#1 = レコード 1 から 100、Page#2 = レコード 101 から 200 など)。
PageA が読み込まれると、ナビゲーション クラスのインスタンス (シングルトン) が呼び出されます。このようにして、現在のページ番号を失うことはありません。問題は、ページ #6 で PageB.aspx に移動すると、インスタンスを作成したため、PageB.aspx がページ #6 から始まることです。Page_Load で現在のページを 1 に設定したいのですが、ご覧のとおり、Page_Load はページで何かが変更されるたびに呼び出されます :(
これを行う最善の方法は何ですか?
例として、これが私の PageA.aspx です
protected void Page_Load(object sender, EventArgs e)
{
navigation = NavigationPage.getInstance();
loadItems();
}
private void loadItems()
{
ArrayList arItems = soldJobsDAO.GetQuotesToShow();
loadPageNavigation(arItems.Count);
// Start Table Headers
// ...
// End Table Headers
int min = navigation.minPage > arItems.Count ? 0 : navigation.minPage;
int max = navigation.maxPage > arItems.Count ? arItems.Count : navigation.maxPage;
for (int i = min; i < max; i++)
{
SoldJobs job = (SoldJobs)arItems[i];
// Start Table Rows
// Start Table Cells
// End Table Cells
// End Table Rows
}
}
private void loadPageNavigation(int maxValue)
{
PageNavigation.Controls.Clear();
ArrayList NavDiv = navigation.getNavigationPage(maxValue);
for(int i = 0; i < NavDiv.Count; i++)
{
PageNavigation.Controls.Add((LinkButton)NavDiv[i]);
}
}
これがナビゲーションクラスです
namespace HomeSite.Class
{
public class NavigationPage
{
private static NavigationPage navigation;
private int m_currentPage;
private int m_minPage;
private int m_maxPage;
private const int NB_ITEM_PER_PAGE = 15;
private NavigationPage()
{
currentPage = 1;
}
public static NavigationPage getInstance()
{
if (navigation == null)
{
navigation = new NavigationPage();
}
return navigation;
}
public int currentPage
{
get
{
return m_currentPage;
}
set
{
m_currentPage = value;
maxPage = currentPage * NB_ITEM_PER_PAGE;
minPage = maxPage - NB_ITEM_PER_PAGE;
}
}
public int minPage
{
get
{
return m_minPage;
}
set
{
m_minPage = value;
}
}
public int maxPage
{
get
{
return m_maxPage;
}
set
{
m_maxPage = value;
}
}
public int getNumberItemPerPages
{
get
{
return NB_ITEM_PER_PAGE;
}
}
public ArrayList getNavigationPage(int maxValue)
{
ArrayList arItems = new ArrayList();
int maxNbPagesToDisplay = 11;
int nbPages = 1;
if (maxValue > 0)
nbPages = maxValue / getNumberItemPerPages + 1;
if (nbPages != 1)
{
LinkButton link;
// We want the current page to be centered if possible
int FirstPageDisplayed = currentPage - (maxNbPagesToDisplay/2);
if (FirstPageDisplayed < 1)
FirstPageDisplayed = 1;
int LastPageDisplayed = FirstPageDisplayed + maxNbPagesToDisplay - 1;
if (LastPageDisplayed > nbPages)
LastPageDisplayed = nbPages;
for (int i = (FirstPageDisplayed - 1); i <= (LastPageDisplayed - 1); i++)
{
int PageNumber = i + 1;
link = new LinkButton();
link.ID = "Page" + PageNumber.ToString();
link.Text = PageNumber.ToString();
link.CommandArgument = PageNumber.ToString();
//link.Command += LinkButton_SetCurrentPage;
link.Style.Add("font-size", "14px");
arItems.Add(link);
}
}
return arItems;
}
}
}