我尝试根据用户角色隐藏主页中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"
,但仍然无效。
答案 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")