2011-07-04 88 views
1

我有2種類型的用戶(phonebookers和salesrep)。他們應該有兩個不同的菜單欄,等待登錄。master.page中的不同菜單取決於登錄類型

從login.aspx - 我設置了一個Session[]其中一個["EmployeeType"]。 在我的母版頁中,我有一個ContentPlaceholder ID="Menu"

Master.page似乎鎖定就位,很久之前我可以更改任何掛起某些會話值。我發現加載順序似乎確認我的懸浮,因爲在任何內容頁面進入遊戲之前,主頁面被加載並鎖定。我試過<% If (Session["EmployeeType"].ToString() == "1") { %> type 1 employee <% } else {%>Type 2 employee<% } %> - 沒有運氣。我試過Page_PreRender(EventArgs e) - 沒有運氣。
我試圖在主頁面中有超鏈接控件,沒有文本,然後設置文本後來我PreRender和可見=真/假 - 沒有運氣。

谷歌說有一個與JavaScript的選項,但我還沒有找到任何例子,或者我沒有認出任何JavaScript作爲我可以使用的東西。

Google發現很少有人遇到與我相反的問題,他們的主頁加載方式太多了,他們想要阻止它這樣做。

回答

1

嘗試:

<% If (Session["EmployeeType"].ToString() == "1") { %> type 1 employee <% } else {%>Type 2 employee<% } %> 
+0

感謝您強迫我重新審覈我的代碼。發現我有兩種類型的員工 - 類型2和類型1/0。由於某種原因,其中一種類型既有0又有1。 – DoStuffZ

1

我建議定義母版頁類的一些公共靜態方法來設置不同類型的菜單:

public partial class SiteMaster : System.Web.UI.MasterPage 
{ 
    // ... 

    public static void SetEmployeeMenu(MasterPage master) 
    { 
     // do whatever you want on master page 
     ((SiteMaster)master).EmployeeMenu.Style.Add("display", ""); 
    } 
} 

,然後在你的內容頁面加載事件決定哪個菜單你想顯示和使用這些功能:

SiteMaster.SetEmployeeMenu(this.Master); 
2

我會避免在你的masterpag中執行邏輯e,它往往會變得有點混亂。

我會做的是創建兩個面板並默認隱藏其中一個面板,這是最不常見的面板。然後啓用從母版的代碼appropriet面板背後是這樣的:

<div id="menu"> 
    <asp:Panel ID="UserMenu" runat="server"> 
     <MenuControl:UserMenu /> 
    </asp:Panel> 
    <asp:Panel ID="AdminMenu" runat="server" Visible="false"> 
     <MenuControl:AdminMenu /> 
    </asp:Panel> 
</div> 

Page_Load方法看起來像現在這樣:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["EmployeeType"].ToString() == "1") 
    { 
     AdminMenu.Visible = true; 
     UserMenu.Visible = false; 
    } 
    else 
    { 
     AdminMenu.Visible = false; 
     UserMenu.Visible = true; 
    } 
} 

這將顯示我的用戶控制AdminMenu它是否與EmployeeType的員工等於1,否則顯示UserMenu用戶控件。

+0

通過這種方式,您的母版頁中的邏輯與您的第一句相反。 – nima

+0

@nima,在我的第一次感謝中,我正在談論'主頁面設計文件',做邏輯代碼並不差。 –

+0

所以你的意思是你把面板放在所有需要菜單的頁面上?如果是這樣,如果你想改變菜單中的某些東西,該怎麼辦? – nima

相關問題