2009-06-23 112 views
0

我遇到了一個我正在建立的尋呼控制的問題。我的代碼如下ASP.NET控制渲染管道

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 

    pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" }; 
    Controls.Add(ddl); 

    AddPagerControls(); 
} 

AddPagerControls增加了大量使用同一個事件處理了LinkBut​​ton的:

private void li_Click(object sender, EventArgs e) 
{ 
    selectedValue = ((LinkButton) sender).CommandArgument; 
    AddPagerControls(); 
} 

什麼,現在的情況是,當我添加了「下一步」 LinkBut​​ton的,它得到它的CommandArgument正確設置使用:

var liNext = new LinkButton {ID = "NewsPagerLinkNext", Text = ">", CommandArgument = (int.Parse(value) + 1).ToString()}; 
liNext.Click += new EventHandler(li_Click); 
pnl.Controls.Add(liNext); 

即,如果當前頁面爲2,則在調試代碼時「Next」按鈕的CommandArgument將爲3。 但是,當頁面已經呈現並且我點擊下一個按鈕時它將會工作一次(從第1頁到第2頁),但是它總是2,即使在代碼中它被設置爲3。控制被呈現。

我有點在這裏損失。我嘗試將CreateChildControls中的AddPagerControls調用更改爲if(!Page.IsPostBack){AddPagerControls();},但事件處理程序根本不會觸發。

編輯: P.S.I當從事件處理程序調用AddPagerControls方法時,做一個pnl.Controls.Clear(),否則LinkBut​​tons將被添加兩次。

編輯:P.P.S.我recaculate它了LinkBut​​ton每次補充,因爲我需要只顯示5個環節如果有更多的存在,那麼即頁面

< < < 2 3 4 5 6 7> >>

回答

0

我不明白的是爲什麼你總是重新生成你的分頁控件。難道你不能只使用一種方法,你有你的鏈接按鈕「prev」和「next」,你保持在你的控制視圖狀態(作爲單獨的屬性)當前正在查看的頁面和項目數量(即頁面大小)?

在事件處理程序中,您將執行正確的操作,因爲您知道當前頁面的內容類似於currentPageIndex+1或類似內容。從我的角度來看,特別是在處理程序中重新生成上一個/下一個按鈕並不是一個好方法,這也可能會導致您的問題。

+0

已經嘗試過,即使當liNext LinkBut​​ton總是在那裏,使其在需要時可見並在事件處理程序中設置CommandArgument導致相同的事情時,我可以單擊任何鏈接一次,然後停止工作,就好像是控件在控制樹之外或其他東西(不可能,我知道...) – Colin 2009-06-23 09:53:24