2012-04-15 64 views
0

這是一個similar question,但我在實現該解決方案時遇到了麻煩。動態交換用戶控件

在我來說,我有兩個環節,用戶設置空間設置和兩個用戶控件,即,UserSettings.ascxSpaceSettings.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.csPage_Load方法已顯示在輸出窗口(右)。
  • 空間設置鏈接已被點擊時,用戶控件SpaceSettings.ascx已經被加載(右),但在輸出窗口正在打印用戶(錯)也從兩個UserSettings.ascx.csSpaceSettings.ascx.csPage_Load方法日誌已被顯示(UserSettings.ascx.cs的日誌是錯誤的)。
  • 用戶設置鏈接已被點擊時,用戶控件UserSettings.ascx已經被加載(右),但在輸出窗口正在打印空間(錯)也從兩個UserSettings.ascx.csSpaceSettings.ascx.csPage_Load方法日誌已被顯示(SpaceSettings.ascx.cs的日誌是錯誤的)。
  • 我已經添加了兩個按鈕到,如果被點擊時候,說的SpaceSettings.ascx按鈕被點擊的時候,在不觸發在支持類第一次的事件,但它確實它的用戶控件中的每一個第二次。第一次登錄用戶(錯誤)和第二次空間(右)然後事件將被解僱。
  • 當我第二次訪問頁面時,我看到最後加載的控件。由於Session["Settings"]不爲空然後。我試圖在Page_UnloadOnUnload方法中將此值設置爲null,但它們都不起作用。 Page_Unload正在打破系統,因爲它每次都被調用,而PostBackOnUnload沒有被調用。

我曾嘗試使用Request["Settings"]代替Session["Settings"],但Request["Settings"] = "User"Request["Settings"] = "Space"是給我編譯時錯誤:

Property or indexer 'System.Web.HttpRequest.this[string]' cannot be assigned to 

我該如何解決這個問題?

謝謝。

+0

您可能會等待其他人評論如何解決問題,但是是不是應該爲這種客戶端選項卡切換到jQuery? http://docs.jquery.com/UI/Tabs – 2012-04-15 11:54:30

+0

@Lex李爲什麼我應該在這種情況下使用jQuery選項卡?我想我必須加載頁面加載的所有內容,這將是非常糟糕的。 – 2012-04-15 14:49:21

+0

jQuery選項卡也支持AJAX。 – 2012-04-16 01:33:50

回答

0

我已經嘗試了不同的方法來解決我的要求,並解決了用戶控件的交換,但後來我遇到的事件處理的用戶控件按鈕沒有被燒製的第一時間,但如果點擊兩次,則會觸發。

我在ASP.NET論壇問過這個問題。但是沒有人回答我的問題。但我一直在努力尋找解決方案,並且最終使之成爲可能。問題出在ID上。我在該論壇發佈瞭解決方案。

這裏是link。這可能對未來的用戶有用。