2012-01-11 27 views
0

我已经创建了一个自定义分页类 - Pagger - 为实现分页控件的分页。自定义分页回传后读取动态控件的值

现在,Pagger对象生成包含导航btns一个ASP:Panel - ASP:LinkButton - 即负责导航,每个BTN它里面存储产生的pageNumber它必须导航到

实施例:
enter image description here

为了增强分页功能,我使用了Ajax - ASP:UpdatePanel - 来围绕paging panel,
现在,每个btn's clickPostBack发生,所以我重新创造了所有的btnsOnPreInit页面事件,让他们可以再次使用 - 即是明显的,而不是将以下问题

protected override void OnPreInit(EventArgs e) 
    { 
     Pagger p = new Pagger(itemsCount, itemsPerPage); 

     //Here the pager reads from viewstate to know 
     //which pageNumber is the currentPage and generates btns according to it 
     p.GeneratePaggerPanel(CurrentPageNumber); 
     Panel1.Controls.Add(p.PaggerPanel); 

     //link the LinkBtn to event handler to be executed upon clicking 
     foreach (Control c in p.PaggerPanel.Controls) 
     { 
      if (c is LinkButton) 
      { 
       ((LinkButton)c).Click += Button1_Click; 
      } 
     } 
     base.OnPreInit(e); 
    } 

现在,为了知道哪些pageNumberre-creating日是currentPageNumber我去把它存储在ViewState

public uint CurrentPageNumber 
    { 
     get 
     { 
      if (ViewState["CurrentPageNumber"] != null) 
       return (uint)ViewState["CurrentPageNumber"]; 
      return 1; 
     } 
     set 
     { 
      ViewState["CurrentPageNumber"] = value; 
     } 
    } 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    CurrentPageNumber = ((PaggerLinkButton)sender).Tag; 
} 

btnEvent Click触发page_load后,多数民众赞成意味着ViewState不会是可用Ëpager btnsOnPreInit事件
我怎么能设置由初始化pager btns panel,使寻呼机可以使用相同的PostBackcurrentPageNumber而不要等到做另一PostBack前阅读pressed btn's valueViewState价值?

我也读过ASP.NET Page Life Cycle Overview,但没有什么帮助。

P.S .:的PaggerLinkButtonLinkButton继承了一个新的属性Tag

回答

0

你有几个选项(即我能想到)。

  1. 将服务器端Button1_click方法替换为您的链接按钮的客户端单击事件处理程序。此客户端方法应将页面值设置为表单上的隐藏控件。请注意,您不需要使用tag属性定制linkbutton类。只需在客户端设置页面值onclick处理程序代码(类似于OnClick ='setPageNo(x); return true;')。然后在OnPreInit中从隐藏的控件中获取当前页面的编号。

  2. 我不知道你为什么重新创建PaggerPanel控件在每个回发(而不是依赖viewstate),但是,你应该能够将GeneratePaggerPanel方法中的逻辑分开到(a)Panel creation myPanel = p.GeneratePaggerPanel ()在OnPreInit中完成,(b)在Button1_click方法中完成的当前页面特定更改p.FixPaggerPanel(myPanel,CurrentPageNo)。

希望这有助于 欢呼声, 尼克