master.page中的不同菜单取决于登录类型

时间:2011-07-04 11:51:01

标签: c# asp.net menu master-pages

我有两种类型的用户(phonebookers和salesrep)。它们应该有两个不同的菜单栏,等待登录。

在login.aspx中 - 我在其中设置了一些Session[] ["EmployeeType"]。 在我的母版页中,我有ContentPlaceholder ID="Menu"

Master.page似乎已锁定到位,早在我可以更改任何待处理的会话值之前。我发现加载序列似乎证实了我的暂停,因为在任何内容页面进入游戏之前,Masterpage都被加载并锁定。

我试过<% If (Session["EmployeeType"].ToString() == "1") { %> type 1 employee <% } else {%>Type 2 employee<% } %> - 没有运气。

我试过Page_PreRender(EventArgs e) - 没有运气 我尝试在母版页中使用超链接控件,没有文本,然后稍后设置文本我PreRender和visible = true / false - 没有运气。

谷歌说javascript有一个选项,但是我没有找到任何例子,或者我没有认识到任何javascript是我可以使用的东西。

谷歌发现很少有人遇到与我相反的问题,他们的主页加载方式太多次了,他们想要阻止它这样做。

3 个答案:

答案 0 :(得分:2)

我会避免在你的母版页中做逻辑,它往往会有点混乱。

我要做的是创建两个面板并默认隐藏其中一个面板,这是最不常见的面板。然后从您的母版页代码中启用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用户控件。

答案 1 :(得分:1)

尝试:

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

答案 2 :(得分: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);