天天看點

謹記給UpdatePanel中動态添加的控件賦ID

 昨天下定決 心對上次做的布局編輯器控件加以改進,其中最主要變化的就是要完全使用ASP.NET AJAX!但是很遺憾,雖然耳聞已久,但目前對ASP.NET AJAX的熟悉程度實在令人汗顔,而且有一段時間沒有怎麼關注了,以前學會的那點皮毛也忘得差不多了,不過即使從頭開始也沒什麼大不了的。雖然決心很大, 不過剛拿起UpdatePanel它就給了我一個下馬威,實在有夠郁悶的!

就 是下面很簡單的一段代碼,意圖很簡單,動态建立一個UpdatePanel,然後在其中放置一個LinkButton!(為了做對比,我在 UpdatePanel外面也放置了一個LinkButton)按照以前的經驗,這就是實作局部重新整理所需的全部工作了,而且ASP.NET AJAX 1.0中,UpdatePanel的ChildrenAsTriggers屬性預設true,也就是說UpdatePanel中的LinkButton自 動成為觸發器。

 1 public partial class _Default : System.Web.UI.Page

 2 {

 3     protected override void OnInit(EventArgs e)

 4     {

 5         base.OnInit(e);

 6 

 7         UpdatePanel p1 = new UpdatePanel();

 8         p1.ID = "MyUpdatePanel";

 9 

10         LinkButton lbInside = new LinkButton();

11         lbInside.Text = "Inside updatepanel";

12         p1.ContentTemplateContainer.Controls.Add(lbInside);

13         this.PlaceHolder1.Controls.Add(p1);

14 

15         LinkButton lbOutside = new LinkButton();

16         lbOutside.Text = "Outside updatepanel";

17         this.PlaceHolder1.Controls.Add(lbOutside);

18     }

19 }

可是運作結果卻讓我大跌眼鏡(雖然我不帶眼鏡,呵呵),點選“Inside updatepanel”并沒有像我想的那樣局部重新整理,而是重新整理了整個頁面,出現的浏覽曆史記錄就是明證!而點選設計期添加的那個LinkButton則完全正常!

謹記給UpdatePanel中動态添加的控件賦ID

到了這裡,出于對MS的一貫信任,我不禁懷疑起自己的智商來,那麼一小段代碼居然會有問題,難道我年紀輕輕就老年癡呆了???天哪!我戰戰兢兢檢視了一下頁面源碼:

謹記給UpdatePanel中動态添加的控件賦ID

嗯,細看之下果然有點差別,那些“ctlXXX”無疑是自動生成的ID,但是我怎麼就沒看到對應的id屬性呢?難道就是它們在搞鬼?反正死馬做活馬醫,加上ID再說,再次運作,果然,一切搞定,哈哈~~~(旁白:果然是老年癡呆,至于笑成這樣嘛!!!)

11         lbInside.ID = "lbInside";

12         lbInside.Text = "Inside updatepanel";

13         p1.ContentTemplateContainer.Controls.Add(lbInside);

14         this.PlaceHolder1.Controls.Add(p1);

15 

16         LinkButton lbOutside = new LinkButton();

17         lbOutside.Text = "Outside updatepanel";

18         this.PlaceHolder1.Controls.Add(lbOutside);

19     }

20 }

繼續閱讀