我有一个菜单,我已经为之构建风格,并有一些菜单选项,不应该显示给非管理员用户。我将链接到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的检查器中,它没有列出已应用的限制。
我从来没有尝试过这样做,但我看到它做了,我想知道我错过了什么?任何帮助都是非常感谢的。
发布于 2014-03-05 19:14:58
您没有返回正确的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甚至不会发送到客户端,除非它们处于正确的角色中。
https://stackoverflow.com/questions/22206321
复制相似问题