【问题标题】:How to hide an element in master page navbar如何在母版页导航栏中隐藏元素
【发布时间】:2017-11-03 00:59:06
【问题描述】:

我正在尝试根据用户角色在母版页中隐藏来自 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",但仍然无法正常工作。

【问题讨论】:

  • 请提供您收到的错误。
  • 错误:System.NullReferenceException:'对象引用未设置为对象的实例。' liDashboard 为空。
  • 试试这个答案stackoverflow.com/questions/11416959/…。基本上,您需要先找到您的 ContentPlaceHolder,然后在其中找到您的控件。

标签: c# asp.net


【解决方案1】:

使用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">

【讨论】:

  • 代码没有错误但该项目仍然出现在导航栏中。
  • @MohammadSaffarini 因为你错过了runat="serverliDashboard。检查我更新的答案。
  • 仍然有相同的这里是你的更新'
  • @MohammadSaffarini 也尝试重建您的项目一次。如果您执行此步骤,它应该可以正常工作。
  • 我用 response.redirect 测试它,它工作正常
【解决方案2】:

例如 如果你的占位符是这样的。

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

尝试使用类似的东西

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

然后分层找到你的价值

当然值需要runat="server"

编辑

给你的PlaceHolder 一个ID

&lt;asp:PlaceHolder ID="Something" runat="server"/&gt; 并通过以下方式获得您的价值:

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

【讨论】:

  • 还是一样的结果 System.Web.UI.HtmlControls.HtmlGenericControl liDashboard = (System.Web.UI.HtmlControls.HtmlGenericControl)Master?.FindControl("myDiv")。 FindControl("MasterMenu").FindControl("liDashboard"); if (liDashboard != null) liDashboard.Visible = false;
  • 把所有母版页放在这里,请不要放任何(?)空控件。如果为空,你需要得到一个错误
  • 我会把它作为答案
  • 再次检查答案
  • 还是同样的问题
猜你喜欢
相关资源
最近更新 更多
热门标签