ASP.NET中,動態載入使用者控制元件
ASP.NET中,動態載入使用者控制元件,有些人可能會碰到使用者控制元件中的事件(比如按鈕等)沒有觸發,使用者控制元件消失等情形。我也曾遇到這樣的情況,將一些經驗總結如下,實際上,如果你對ASP.NET的頁面模型及其生命週期很熟悉的話,這樣的問題很容易想到解決方法的。
使用者控制元件中的事件會導致其所在的頁面回發,在回發時必須將使用者控制元件重新載入。
在載入使用者控制元件的方法中,將最後一次載入的使用者控制元件路徑儲存起來,以便在頁面Load方法中重新載入該控制元件。
protected void Page_Load( object sender , EventArgs e ){
if( this.LatestLoadedControlName != "" )
this.LoadUserControl( LatestLoadedControlName , container );
}
protected string LatestLoadedControlName
{
get
{
return (string)ViewState["LatestLoadedControlName"];
}
set
{
ViewState["LatestLoadedControlName"] = value;
}
}
public void LoadUserControl(string controlName, Control container)
{
//先移出已有的控制元件
if (LatestLoadedControlName != null)
{
Control previousControl = container.FindControl(LatestLoadedControlName.Split('.')[0]);
if (previousControl != null)
{
container.Controls.Remove(previousControl);
}
}
string userControlID = controlName.Split('.')[0];
Control targetControl = container.FindControl(userControlID);
if (targetControl == null)
{
UserControl userControl = (UserControl)this.LoadControl(controlName);
userControl.ID = userControlID;
container.Controls.Add(userControl);
LatestLoadedControlName = controlName;
}
}
使用者控制元件中的事件會導致其所在的頁面回發,在回發時必須將使用者控制元件重新載入。
在載入使用者控制元件的方法中,將最後一次載入的使用者控制元件路徑儲存起來,以便在頁面Load方法中重新載入該控制元件。
protected void Page_Load( object sender , EventArgs e ){
if( this.LatestLoadedControlName != "" )
this.LoadUserControl( LatestLoadedControlName , container );
}
protected string LatestLoadedControlName
{
get
{
return (string)ViewState["LatestLoadedControlName"];
}
set
{
ViewState["LatestLoadedControlName"] = value;
}
}
public void LoadUserControl(string controlName, Control container)
{
//先移出已有的控制元件
if (LatestLoadedControlName != null)
{
Control previousControl = container.FindControl(LatestLoadedControlName.Split('.')[0]);
if (previousControl != null)
{
container.Controls.Remove(previousControl);
}
}
string userControlID = controlName.Split('.')[0];
Control targetControl = container.FindControl(userControlID);
if (targetControl == null)
{
UserControl userControl = (UserControl)this.LoadControl(controlName);
userControl.ID = userControlID;
container.Controls.Add(userControl);
LatestLoadedControlName = controlName;
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-526850/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【轉載】asp.net動態載入ascx使用者控制元件ASP.NET控制元件
- 使用者控制元件的動態載入控制元件
- Asp.net動態載入控制元件的一些問題ASP.NET控制元件
- ASP.net中動態載入控制元件時一些問題的總結ASP.NET控制元件
- 【wljcan】ASP.net中動態載入控制元件時一些問題的總結ASP.NET控制元件
- C# aspx頁面動態載入ascx使用者控制元件C#控制元件
- DLL動態庫動態載入
- Asp.net開發之旅--動態產生控制元件ASP.NET控制元件
- vue 動態載入元件Vue元件
- Java動態載入類Java
- 動態載入UserControl
- OrchardCore 如何動態載入模組?
- 使用dlopen載入動態庫
- ListView動態載入資料View
- QLibrary 載入動態庫
- vue 動態載入組建Vue
- goloader - golang動態載入Golang
- 熱更新--動態載入frameworkFramework
- 動態庫載入過程
- 動態載入APK原理分享APK
- 動態載入JS和CSSJSCSS
- 動態載入JS的方法JS
- 動態載入!dom應用!
- python動態載入(三)Python
- 指令碼的動態載入指令碼
- swift中的名稱空間及動態載入類Swift
- Asp.Net中動態頁面轉靜態頁面ASP.NET
- 【轉載】關於C#中動態載入AppDomain的問題C#APPAI
- aspx頁面中動態建立控制元件 (轉)控制元件
- js動態載入實現提高網頁載入速度JS網頁
- EasyUI Jquery 動態載入樹,點選節點載入UIjQuery
- echarts遷移圖動態載入Echarts
- 如何動態載入js檔案JS
- Android動態載入jar/dexAndroidJAR
- Angularjs動態載入ECharts(一)AngularJSEcharts
- nginxphp動態編譯載入模組.NginxPHP編譯
- easyui 動態載入語言包UI
- linux核心動態載入模組Linux