如何隐藏母版页导航栏中的元素

时间:2017-10-25 14:10:52

标签: c# asp.net

我尝试根据用户角色隐藏主页中navbar的菜单选项 但是当我试图调用元素时,它会给我一个错误。

这就是我所做的:

母版

<div class="navbar-collapse collapse">
    <ul id="MasterMenu" class="nav navbar-nav">
        <li id="liDashboard">
            <a runat="server" href="~/_Dashboard">Dashboard</a>
        </li>
        <li id="liTicket">
            <a runat="server" href="~/Forms/Tickets/_Ticket">Ticket+</a>
        </li>
        <li id="liReports">
            <a runat="server" href="-">Reports</a>
        </li>
    </ul>  
</div>

在另一页

if (User.IsInRole("User"))
{
    System.Web.UI.HtmlControls.HtmlGenericControl liDashboard = (System.Web.UI.HtmlControls.HtmlGenericControl)Master.FindControl("liDashboard");
    liDashboard.Visible = false;
}

此外,我尝试添加runat="server",但仍然无效。

2 个答案:

答案 0 :(得分:3)

使用Null-Conditional运算符(?.)并在分配前检查null:

System.Web.UI.HtmlControls.HtmlGenericControl liDashboard = 
     (System.Web.UI.HtmlControls.HtmlGenericControl)Master?.FindControl("liDashboard");
if (liDashboard != null) liDashboard.Visible = false;

您还错过了以下一行中的runat="server"

<li id="liDashboard" runat="server">

答案 1 :(得分:1)

例如 如果你的占位符是那样的话。

<asp:ContentPlaceHolder ID="MainContent" runat="server"/> 

尝试使用类似的东西

Master.FindControl("MainContent").FindControl("liDashboard") 

然后按层次结构找到你的值

当然,价值必须与runat="server"

一致

修改

PlaceHolder ID

提供给您

<asp:PlaceHolder ID="Something" runat="server"/>并通过以下方式获取您的价值:

Master.FindControl("Something").FindControl("liDashboard")