我有一个菜单,我已经为其构建了样式,并且有一些菜单选项不应该显示给非管理员用户。我已经将一个指向asp.net页面的链接作为动态样式。这是代码:
<head runat="server">
<title></title>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<link href="~/Styles/DynamicStyle.aspx" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
</asp:ContentPlaceHolder>
</head>
DynamicStyle.aspx的来源:
protected void Page_Load(object sender, EventArgs e)
{
if(!Roles.IsUserInRole("Administrators"))
{
StringBuilder oSb = new StringBuilder();
oSb.AppendLine(".restricted");
oSb.AppendLine("{");
oSb.AppendLine("display: none;");
oSb.AppendLine("}");
Response.Write(oSb.ToString());
Response.End();
}
}
我已经确认它确实发出了正确的CSS。
这里有一段应该隐藏按钮的代码:
<li><a href="events.aspx">Events</a></li>
<li><a href="industries.aspx">Industries</a></li>
<li class="restricted"><a href="institutions.aspx">Institutions</a></li>
<li><a href="jobgroups.aspx">Job Groups</a></li>
<li><a href="jobtitles.aspx">Job Titles</a></li>
在Mozilla的检查员中,它没有将限制列为已经应用。
我从来没有试过这样做,但看到它已经完成,我想知道我错过了什么?任何帮助表示赞赏。
答案 0 :(得分:1)
您没有为CSS返回正确的内容类型(它的返回类型为text/html
而不是text/css
)。如果添加Response.ContentType = "text/css";
:
Response.ContentType = "text/css";
Response.Write(oSb.ToString());
Response.End();
但真正的问题是你只是“隐藏”人们不应该看到的链接......但如果他们查看页面源,他们仍然可以看到它们。更好的选择是根本不将这些链接发送到客户端。一种选择是:
<li id="_admin1" runat="server"><a href="institutions.aspx">Institutions</a></li>
然后在你的代码中:
_admin1.Visible = Roles.IsUserInRole("Administrators");
现在,<li>
的html甚至不会被发送到客户端,除非它们的角色正确。