ASP.net 動(dòng)態(tài)加載控件時(shí)一些問題的總結(jié)
1 、在使用LoadControl加載控件后,用戶控件中的某些控件不再響應(yīng)事件。
這個(gè)問題主要是由于將控件加載放在if (!Page.IsPostBack)之內(nèi)引起的,放在外面即可。在思?xì)w的blog上對此問題進(jìn)行了詳細(xì)的說明。
2、用戶控件中某些控件的響應(yīng)出現(xiàn)問題,如某個(gè)按鈕第一次選擇時(shí)不觸發(fā)CLICK事件,第二次可以了。
這是由于沒有給控件設(shè)置ID引起的,控件ID的作用在下面詳細(xì)講述。 如
Control userControl=(Control)Page.LoadControl(“Test.ascx”);
userControl.ID=“Test”;
AddControl(userControl);
3、如果用戶控件中包括DataGrid控件,那么加載控件后可能出現(xiàn)不響應(yīng)DataGrid事件的問題。
這好像是一個(gè)bug,必須要將加載的控件進(jìn)行強(qiáng)制轉(zhuǎn)換,如:
Test userControl=(Test)Page.LoadControl(“Test.ascx”);
注意:上面使用的是Test類型,而不是Control!
我在以前的Blog中曾提到過這個(gè)問題,這種方式將使系統(tǒng)的擴(kuò)展性降低。 我有一個(gè)解決方案可以和大家討論(運(yùn)用策略模式):
public class BaseControl : System.Web.UI.UserControl
{
public virtual BaseControl ProcessThisControl();
}
所有的用戶控件從BaseControl 繼承,如果有Datagrid控件,由overide ProcessThisControl方法,如:
return this as Test;
按如下方式加載控件:
BaseControl userControl=(BaseControl )Page.LoadControl(“Test.ascx”);
userControl.ProcessThisControl();
4、在用戶控件中如何使用JavaScript。
大家都知道,使用客戶端的腳本將大大提高頁面的響應(yīng)速度,同時(shí)可以避免頻繁地刷新頁面。所以使用javascript來實(shí)現(xiàn)頁面中部分控制是一個(gè)比較好的方式,但是在用戶控件中如果訪問某一個(gè)子控件呢?
使用方式如下:
document.all.<%= TestControl.ClientID%>.disabled=true; //將TestControl設(shè)置為不可用
如果在C#腳本中應(yīng)該這樣寫:Page.RegisterStartupScript("OnInitControl","<SCRIPT LANGUAGE='JavaScript'>document.all.Test_TestControl.disabled=true;</SCRIPT>"); //Test為用戶控件,TestControl為用戶控件中的子控件。
現(xiàn)在說一下控件ID,在訪問aspx文件時(shí),IIS會(huì)將aspx的腳本進(jìn)行編譯。編譯的時(shí)候?qū)⒂脩艨丶械膬?nèi)容寫在同一個(gè)頁面中,為了防止頁面中的控件與用戶控件中的控件名稱相同,在編譯的時(shí)候?qū)τ脩艨丶械目丶Q修改為 : 用戶控件名:子控件 ,控件ID則修改為 用戶控件ID_子控件ID。 在動(dòng)態(tài)加載控件時(shí),如果不對控件的ID進(jìn)行賦值,則控件ID為上一次加載的控件ID,因此在加載用戶控件后應(yīng)該立即對其設(shè)置ID.
- ASP.NET動(dòng)態(tài)添加控件一例
- asp.net 動(dòng)態(tài)添加多個(gè)用戶控件
- asp.net(C#) 動(dòng)態(tài)添加非ASP的標(biāo)準(zhǔn)html控件(如添加Script標(biāo)簽)
- asp.net動(dòng)態(tài)加載自定義控件的方法
- asp.net 動(dòng)態(tài)創(chuàng)建TextBox控件及狀態(tài)數(shù)據(jù)如何加載
- ASP.NET 頁面中動(dòng)態(tài)增加的控件、添加事件
- ASP.NET 動(dòng)態(tài)寫入服務(wù)器端控件
- asp.net 動(dòng)態(tài)生成控件并獲取其值
- ASP.NET動(dòng)態(tài)添加用戶控件的方法
相關(guān)文章
ASP.NET?Core中MVC模式實(shí)現(xiàn)路由二
這篇文章介紹了ASP.NET?Core中MVC模式實(shí)現(xiàn)路由的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
c#后臺(tái)修改前臺(tái)DOM的css屬性示例代碼
本文為大家詳細(xì)介紹下如何使用c#修改前臺(tái)DOM的css屬性,具體示例如下,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-07-07
jquery repeater 模仿 Google 展開頁面預(yù)覽子視圖
節(jié)后的這一周, 希望大家能挺住, hehe, 這兩天給大家準(zhǔn)備一個(gè) Repeater 子視圖的例子, 模擬了 Google 搜索結(jié)果后的頁面的預(yù)覽, 其實(shí)也只是顯示了一段問題2011-10-10
.net設(shè)計(jì)模式之裝飾模式(Decorator)
這篇文章主要為大家詳細(xì)介紹了.net設(shè)計(jì)模式之裝飾模式Decorator,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
asp.net錯(cuò)誤捕獲(錯(cuò)誤處理)page_error事件使用方法
Page_Error事件提供了一種捕獲頁面級錯(cuò)誤的方法。對于錯(cuò)誤的處理,您可以只是顯示錯(cuò)誤信息(正如下面的示例代碼所示),也可以記錄事件或執(zhí)行某個(gè)其他操作2014-01-01
安裝.NET Framework進(jìn)度條卡住不動(dòng)的解決方案(推薦)
VS在安裝之前需要安裝.NET Framework,我安裝的是4.0版本。但是安裝進(jìn)度條到一半左右時(shí)就卡住不動(dòng)了。前前后后重試多次,還有幾次重新開機(jī),但都沒用,怎么解決呢,下面給大家分享下解決方案2016-12-12

