ASP.NET / C#-AJAX Postback Pager問題
質問
「ショップ」ページがあり、店内のすべてのアイテムがリストされています。 sortingfunctionがあり、結果を決定するために。見たいページ。
私もポケットベルを持っています。ポケットベルは、2つのボタン(前と次のページバットン)と、pageNumberを示すテキストボックスで構築されています。ページャーは、ページの上部と下部の両方にあります。
テキストボックスのテキストを変更すると、次のコードが発生します。
protected void tbPageNumberTop_TextChanged(object sender, EventArgs e)
{
tbPageNumberBottom.Text = tbPageNumberTop.Text;
updpanMain.Update();
}
これにより、Pageloadが原因で、テキストボックスから番号を取得し、整数に解析します。これを使用してSQLリクエストを動的に作成できます。これは完璧に機能します。
これが私の問題です。 [次の]ボタンまたは「前の」ボタンをクリックすると、テキストボックスのテキストが変更されますが、テキストボックスから番号を取得すると、ボタンがクリックされる前にテキストボックスの値が表示されます。正しいページナンバーを入手するにはどうすればよいですか?
これが私のクリックコードです:
protected void btnNextPage_Click(object sender, EventArgs e)
{
int PageNumber = Convert.ToInt32(tbPageNumberTop.Text);
PageNumber += 1;
tbPageNumberTop.Text = PageNumber.ToString();
tbPageNumberBottom.Text = PageNumber.ToString();
updpanMain.Update();
}
protected void btnPrevPage_Click(object sender, EventArgs e)
{
int PageNumber = Convert.ToInt32(tbPageNumberTop.Text);
PageNumber -= 1;
tbPageNumberTop.Text = PageNumber.ToString();
tbPageNumberBottom.Text = PageNumber.ToString();
updpanMain.Update();
}
そして、これがpage_loadで起こることです
if (!this.IsPostBack)
{
intStartPosition = 0;
intPageNumber = 1;
tbPageNumberBottom.Text = intPageNumber.ToString();
tbPageNumberTop.Text = intPageNumber.ToString();
}
if (tbPageNumberTop.Text != "1" || tbPageNumberBottom.Text != "1")
{
intPageNumber = Convert.ToInt32(tbPageNumberTop.Text);
}
else
{
intPageNumber = 1;
}
intStartPosition = (intPageNumber * intItemsPrPage) - intItemsPrPage;
strResultsPrPage = intItemsPrPage.ToString();
intStartpositionは私のSQL文字列の最初の制限整数を表し、StrResultSprPageは2番目の整数を表します。つまり、500から600の結果を示しています。
解決
Page_loadイベントは、ボタンのクリックイベントの前に発射されます。クリックイベントがその値を更新する前に、TextBox(TBPagenumbertop.text)から取得した値(tbpagenumbertop.text)から取得した値に基づいて、Page_loadイベントでSQLコール(intStartPosition and stresultsprapage)で使用されているパラメーターを設定しているようです。
クリックイベントが現在のページ値を更新する機会が得られるまで、そのSQLコールを遅らせる方法を見つける必要があります。
説明のためにページのライフサイクルを見たいかもしれません。
他のヒント
問題が解決しました。
私がしたことは次のとおりでした:
page_loadコードで、次のことを書きました。
protected void Page_Load(object sender, EventArgs e)
{
Page.LoadComplete += new EventHandler(Page_LoadComplete);
}
そして、新しいEventHandler内に古いPage_load CodeBlockを貼り付けました。