我有两种类型的用户(电话簿和销售代表)。他们应该有 2 个不同的菜单栏,等待他们登录。
从 login.aspx - 我设置了一个数字 Session[]
其中有一个["EmployeeType"]
.
在我的母版页中,我有一个 ContentPlaceholder ID="Menu"
.
Master.page 似乎锁定在适当的位置,很久以前我就可以更改任何挂起的 session 值。我发现加载顺序似乎证实了我的悬念,因为在任何内容页开始播放之前加载并锁定了母版页。
我试过了 <% If (Session["EmployeeType"].ToString() == "1") { %> type 1 employee <% } else {%>Type 2 employee<% } %>
- 运气不好。
我在 Page_PreRender(EventArgs e)
中尝试过这样做- 运气不好。
我尝试在母版页中使用超链接控件,但没有文本,然后稍后设置文本我 PreRender 和可见 = true/false - 运气不好。
Google 说有一个 javascript 选项,但我没有找到任何示例,或者我没有认识到任何 javascript 是我可以使用的东西。
Google 发现有相当多的人遇到与我相反的问题,他们的母版页加载次数太多,他们想阻止它这样做。
最佳答案
我会避免在你的母版页中做逻辑,它往往会变得有点困惑。
我要做的是创建两个面板并默认隐藏其中一个,即最不常显示的面板。然后从您的母版页代码中启用适当的面板,如下所示:
<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
用户控件。
关于c# - master.page 中的不同菜单取决于登录类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571082/