如何从c#asp.net中隐藏的母版页代码中根据用户角色更改导航栏项

如何从c#asp.net中隐藏的母版页代码中根据用户角色更改导航栏项,asp.net,master-pages,code-behind,roles,Asp.net,Master Pages,Code Behind,Roles,我正在visual studio 2013中从事一个网站项目 我的导航栏中有一些项目,其中一个是“管理”,我希望它能将用户带到某个页面,如果他是某个页面的管理员,如果他是另一个页面的委员会,等等。。我使用了以下代码,但出现了此异常: (中发生了类型为“System.NullReferenceException”的异常 App_Web_2g0memkh.dll,但未在附加用户代码中处理 信息:对象引用未设置为对象的实例。) 有人有办法解决这个问题吗 Site.master: <LoggedI

我正在visual studio 2013中从事一个网站项目

我的导航栏中有一些项目,其中一个是“管理”,我希望它能将用户带到某个页面,如果他是某个页面的管理员,如果他是另一个页面的委员会,等等。。我使用了以下代码,但出现了此异常:

(中发生了类型为“
System.NullReferenceException
”的异常 App_Web_2g0memkh.dll,但未在附加用户代码中处理 信息:对象引用未设置为对象的实例。)

有人有办法解决这个问题吗

Site.master:

<LoggedInTemplate>
    <ul class="nav navbar-nav navbar-right" runat="server" id="list">
        <li id="A1" runat="server"><a runat="server" title="Go To Control Page" href="~/Admin/control.aspx">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
        <li id="A2" runat="server"><a runat="server" title="Go To Control Page" href="~/Committee/control.aspx">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
        <li id="A3" runat="server" ><a runat="server" title="Manage your account" href="~/Account/Manage">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
        <li><asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Log off" LogoutPageUrl="~/" OnLoggingOut="Unnamed_LoggingOut" /></li>
    </ul>
</LoggedInTemplate>

我想问题出在标签上

我不知道你为什么这么做:

HtmlGenericControl li1 = (HtmlGenericControl)this.Page.Master.FindControl("A1");
li1.Visible = true;
直接给他们打电话就行了

if (Page.User.IsInRole("Admin"))
{
    A1.Visible = true;
    A2.Visible = false;
    A3.Visible = false;
}

它对我有用

好的,谢谢,我解决了我的问题=)它在LoggedInTemplate中,我通过编程实现了它的功能。。。如果有人想得到好处,这是我的解决方案

我取消了asp:LoginView,并登录了模板。然后,我给ul标记一个id,并运行nat=“server”,如下所示

<ul class="nav navbar-nav navbar-right" runat="server" id="LoggedIn" visible="False">

    <li id="A1" runat="server"><a runat="server" title="Go To Control Page" href="~/Admin/control.aspx">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
    <li id="A2" runat="server"><a runat="server" title="Go To Control Page" href="~/Committee/control.aspx">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
    <li id="A3" runat="server"><a runat="server" title="Manage your account" href="~/Account/Manage">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
    <li>
         <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Log off" LogoutPageUrl="~/" OnLoggingOut="Unnamed_LoggingOut" />
    </li>
</ul>

是的,我以前试过,但不起作用。它适用于web表单(指正常的.aspx页面),但不适用于母版页。。。它给出了以下错误:错误1当前上下文中不存在名称“A1”
<ul class="nav navbar-nav navbar-right" runat="server" id="LoggedIn" visible="False">

    <li id="A1" runat="server"><a runat="server" title="Go To Control Page" href="~/Admin/control.aspx">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
    <li id="A2" runat="server"><a runat="server" title="Go To Control Page" href="~/Committee/control.aspx">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
    <li id="A3" runat="server"><a runat="server" title="Manage your account" href="~/Account/Manage">Hello, <%: Context.User.Identity.GetUserName()  %></a></li>
    <li>
         <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Log off" LogoutPageUrl="~/" OnLoggingOut="Unnamed_LoggingOut" />
    </li>
</ul>
if (Request.IsAuthenticated)
    {
        LoggedIn.Visible = true;
        if (Page.User.IsInRole("Admin"))
        {
            A1.Visible = true;
            A2.Visible = false;
            A3.Visible = false;
        }
    }