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是我可以使用的。
谷歌发现,相当多的人有与我相反的问题,他们的主页加载次数太多了,他们想阻止它这样做。
我会避免在母版页中做逻辑,它往往会变得有点混乱。
我要做的是创建两个面板,并在默认情况下隐藏其中一个,即最不常见的显示面板。然后从您的主页代码后面启用适当的面板,如下所示:
<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);