2010-09-13 54 views
0

我有一个'商店'页面,其中列出了商店中的所有商品。我有一个排序功能,来决定有多少结果公关。我想看的页面。ASP.Net/C# - Ajax回发传呼机问题

我也有一个寻呼机。该寻呼机由两个按钮(上一页和下一页按钮)和一个显示页码的文本框构成。寻呼机位于页面的顶部和底部。

当我改变文本框,下面的代码火灾文字:

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个结果)

回答

1

Page_Load事件将在您的按钮之前触发的Click事件。看起来您正在根据从文本框(tbPageNumberTop.Text)中检索的值在Page_Load事件中设置SQL调用(intStartPosition和strResultsPrPage)中使用的参数,Click事件有机会更新该值。

您需要找到一种方法来延迟该SQL调用,直到Click事件有机会更新当前页面值。

你可能想看看在页面生命周期澄清:

http://msdn.microsoft.com/en-us/library/ms178472.aspx

+0

那么,它是如何与Textbox textchanged事件一起工作?根据您链接的页面,click和textchanged事件应该同时触发(在Load和LoadComplete之间) – MadsMadsDk 2010-09-13 20:35:44

0

问题解决了。

我所做的是以下几点:

在Page_Load代码,我写了下面:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Page.LoadComplete += new EventHandler(Page_LoadComplete); 
    } 

然后我粘贴旧的Page_Load代码块新的事件处理程序中,它就像一个魅力。