我有一个“商店”页面,其中列出了商店中的所有商品。我有一个排序功能,来决定pr的结果。我希望看到的页面。
我也有一个寻呼机。寻呼机由两个按钮(上一页和下一页按钮)和一个显示页面编号的文本框构成。寻呼机位于页面的顶部和底部。
当我更改文本框中的文本时,会触发以下代码:
protected void tbPageNumberTop_TextChanged(object sender, EventArgs e)
{
tbPageNumberBottom.Text = tbPageNumberTop.Text;
updpanMain.Update();
}
这会导致页面加载,我从文本框中获取数字,并将其解析为整数,我可以使用它来动态创建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字符串中的第一个LIMIT整数,strResultsPrPage表示第二个整数,即LIMIT 100,500显示500到600的结果。(第5页,每页100个结果)
答案 0 :(得分:1)
您的Page_Load事件将在按钮的Click事件之前触发。在Click事件有机会更新该值之前,您似乎正在基于从文本框(tbPageNumberTop.Text)检索到的值在Page_Load事件中设置SQL调用(intStartPosition和strResultsPrPage)中使用的参数。 / p>
在Click事件有机会更新当前页面值之前,您需要找到一种延迟SQL调用的方法。
您可能需要查看页面生命周期以获得澄清:
答案 1 :(得分:0)
问题解决了。
我做的是以下内容:
在page_load代码中,我写了以下内容:
protected void Page_Load(object sender, EventArgs e)
{
Page.LoadComplete += new EventHandler(Page_LoadComplete);
}
然后我将旧的page_load代码块粘贴到新的事件处理程序中,它就像一个魅力。