0
這是一個similar question,但我在實現該解決方案時遇到了麻煩。動態交換用戶控件
在我來說,我有兩個環節,用戶設置,空間設置和兩個用戶控件,即,UserSettings.ascx
,SpaceSettings.ascx
。
- 用戶第一次訪問該頁面時,他會看到用戶設置。
- 根據點擊這兩個鏈接中的哪一個,PlaceHolder將交換UserControl。
我所做的如下所示:
public partial class SiteSettings : RefreshDitectedPage {
protected void Page_Load(object sender, EventArgs e) {
}
protected override void OnInit(EventArgs e) {
base.OnInit(e);
string key = Session["Settings"] as String;
System.Diagnostics.Debug.WriteLine(key);
if (key == null) {
Session["Settings"] = "User";
AddUserSettings();
} else {
if (key.Equals("User")) {
AddUserSettings();
} else {
AddSpaceSettings();
}
}
}
protected void SettingsLink_OnCommand(object sender, CommandEventArgs commandEventArgs) {
switch (commandEventArgs.CommandName) {
case "User":
Session["Settings"] = "User";
AddUserSettings();
break;
case "Space":
Session["Settings"] = "Space";
AddSpaceSettings();
break;
}
}
private void AddUserSettings() {
AddSettings(LoadControl("~/UserControls/UserSettings.ascx") as UserSettings);
}
private void AddSpaceSettings() {
AddSettings(LoadControl("~/UserControls/SpaceSettings.ascx") as SpaceSettings);
}
private void AddSettings(UserControl control) {
SettingsPlaceholder.Controls.Clear();
SettingsPlaceholder.Controls.Add(control);
}
/*protected void Page_Unload(object sender, EventArgs e) {
Session["Settings"] = null;
System.Diagnostics.Debug.WriteLine("Unload called");
}*/
}
這是行不通的。結果是:
- 在第一次訪問會話[「設置」]是零和用戶控件
UserSettings.ascx
已經被加載(右)和日誌從UserSettings.ascx.cs
Page_Load
方法已顯示在輸出窗口(右)。 - 當空間設置鏈接已被點擊時,用戶控件
SpaceSettings.ascx
已經被加載(右),但在輸出窗口正在打印用戶(錯)也從兩個UserSettings.ascx.cs
和SpaceSettings.ascx.cs
的Page_Load
方法日誌已被顯示(UserSettings.ascx.cs
的日誌是錯誤的)。 - 當用戶設置鏈接已被點擊時,用戶控件
UserSettings.ascx
已經被加載(右),但在輸出窗口正在打印空間(錯)也從兩個UserSettings.ascx.cs
和SpaceSettings.ascx.cs
的Page_Load
方法日誌已被顯示(SpaceSettings.ascx.cs
的日誌是錯誤的)。 - 我已經添加了兩個按鈕到,如果被點擊時候,說的
SpaceSettings.ascx
按鈕被點擊的時候,在不觸發在支持類第一次的事件,但它確實它的用戶控件中的每一個第二次。第一次登錄用戶(錯誤)和第二次空間(右)然後事件將被解僱。 - 當我第二次訪問頁面時,我看到最後加載的控件。由於
Session["Settings"]
不爲空然後。我試圖在Page_Unload
和OnUnload
方法中將此值設置爲null,但它們都不起作用。Page_Unload
正在打破系統,因爲它每次都被調用,而PostBack
和OnUnload
沒有被調用。
我曾嘗試使用Request["Settings"]
代替Session["Settings"]
,但Request["Settings"] = "User"
和Request["Settings"] = "Space"
是給我編譯時錯誤:
Property or indexer 'System.Web.HttpRequest.this[string]' cannot be assigned to
我該如何解決這個問題?
謝謝。
您可能會等待其他人評論如何解決問題,但是是不是應該爲這種客戶端選項卡切換到jQuery? http://docs.jquery.com/UI/Tabs – 2012-04-15 11:54:30
@Lex李爲什麼我應該在這種情況下使用jQuery選項卡?我想我必須加載頁面加載的所有內容,這將是非常糟糕的。 – 2012-04-15 14:49:21
jQuery選項卡也支持AJAX。 – 2012-04-16 01:33:50