如何从c#asp.net中隐藏的母版页代码中根据用户角色更改导航栏项
我正在visual studio 2013中从事一个网站项目 我的导航栏中有一些项目,其中一个是“管理”,我希望它能将用户带到某个页面,如果他是某个页面的管理员,如果他是另一个页面的委员会,等等。。我使用了以下代码,但出现了此异常: (中发生了类型为“如何从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
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;
}
}