未应用动态样式

时间:2014-03-05 18:36:17

标签: c# asp.net css

我有一个菜单,我已经为其构建了样式,并且有一些菜单选项不应该显示给非管理员用户。我已经将一个指向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的检查员中,它没有将限制列为已经应用。

我从来没有试过这样做,但看到它已经完成,我想知道我错过了什么?任何帮助表示赞赏。

1 个答案:

答案 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甚至不会被发送到客户端,除非它们的角色正确。

相关问题