C# 母版页中的不同菜单取决于登录类型

C# 母版页中的不同菜单取决于登录类型,c#,asp.net,menu,master-pages,C#,Asp.net,Menu,Master Pages,我有两种类型的用户:电话预订者和销售代表。他们应该有两个不同的菜单栏,等待登录 在login.aspx中,我设置了许多会话[],其中包括[EmployeeType]。 在母版页中,我有一个ContentPlaceholder ID=菜单 在我可以更改任何挂起的会话值之前很久,Master.page似乎就被锁定了。我找到了加载顺序,这似乎证实了我的暂停,因为母版页在任何内容页开始使用之前已加载并锁定 我试过类型1员工类型2员工-运气不好 我试着在Page_PreRenderEventArgs e中

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

在login.aspx中,我设置了许多会话[],其中包括[EmployeeType]。 在母版页中,我有一个ContentPlaceholder ID=菜单

在我可以更改任何挂起的会话值之前很久,Master.page似乎就被锁定了。我找到了加载顺序,这似乎证实了我的暂停,因为母版页在任何内容页开始使用之前已加载并锁定

我试过类型1员工类型2员工-运气不好

我试着在Page_PreRenderEventArgs e中这样做-不走运。 我尝试在母版页中使用超链接控件,没有文本,然后设置文本,稍后我预渲染并可见=真/假-没有运气

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

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

试试:

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

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

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

我会避免在你的主页中使用逻辑,它会变得有点混乱

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

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

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

我将避免在母版页中执行逻辑,它会变得有点混乱

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

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

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

这样,您在母版页中执行逻辑,与第一句相反。@nima,在我的第一句话中,我指的是母版页设计文件,在后面编写逻辑代码并不坏,所以你的意思是你把面板放在所有需要菜单的页面上?如果是这样的话,如果你想更改菜单中的某些内容,该怎么办?不,我将面板放在MasterPage.master中,并将逻辑放在MasterPage.master.cs的页面加载中。菜单imho应该是用户控件,如果它们有很多内容,这样,它们就不会弄乱母版页。这样,你在母版页中做逻辑,与你的第一句话相反。@nima,在我的第一句话中,我说的是母版页设计文件,在后面编写逻辑代码并不坏,所以你的意思是你把面板放在所有需要菜单的页面上?如果是这样的话,如果你想更改菜单中的某些内容,该怎么办?不,我将面板放在MasterPage.master中,并将逻辑放在MasterPage.master.cs的页面加载中。如果菜单有很多内容,它应该是用户控件,这样就不会弄乱你的母版页。谢谢你强迫我重新检查我的代码。我有两种类型的员工-类型2和类型1/0。出于某种原因,其中一种类型同时具有0和1。感谢您迫使我重新检查我的代码。我有两种类型的员工-类型2和类型1/0。出于某种原因,其中一种类型同时具有0和1。