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

标签 c# asp.net menu master-pages

我有两种类型的用户(电话簿和销售代表)。他们应该有 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/

相关文章:

c# - 如何从 ListView 中的模板化数据中获取 UIElement?

c# - MongoDB.Driver C#自动过期文件

c# - 在 Repeater 中填充 DropDownList 不起作用

c# - 检查 AD 中是否存在用户/电子邮件

html - 我可以使用 Bootstrap 中的 .row 和 .col 制作菜单吗?

c# - 打开项目时出现 "C# 2017 compiler could not be created"错误信息

c# - Linq 表达式嵌套属性,与字符串比较

asp.net - 路由不适用于添加到空 Web 应用程序的 Web API

css - 将菜单与响应列结构缩略图网格对齐?

html - 使用 CSS 增加水平菜单项之间的间距时遇到问题