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

本文关键字:菜单 取决于 登录 类型 page master | 更新日期: 2023-09-27 18:01:09

我有两种类型的用户(电话预订者和销售代表(。他们应该有两个不同的菜单栏,等待登录。

从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)中做这件事,但运气不好
我试着在母版页中设置超链接控件,没有文本,然后稍后在I PreRender中设置文本,visible=true/false-运气不好。

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

谷歌发现,相当多的人有与我相反的问题,他们的主页加载次数太多了,他们想阻止它这样做。

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

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

我要做的是创建两个面板,并在默认情况下隐藏其中一个,即最不常见的显示面板。然后从您的主页代码后面启用适当的面板,如下所示:

<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;
    }
}

如果是EmployeeType等于1的员工,这将显示我的用户控件AdminMenu,否则将显示UserMenu用户控件。

尝试:

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

我建议在主页类中定义一些公共静态方法来设置不同类型的菜单:

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);