【问题标题】:ASP.NET - Conditionally link CSS fileASP.NET - 有条件地链接 CSS 文件
【发布时间】:2010-10-19 15:17:19
【问题描述】:

我想根据用户的会员角色有条件地链接 CSS 文件。管理员应该链接我的 admin.css 文件,而其他人(其他角色和匿名用户)应该显示我的 global.css 文件。这个可以吗?

【问题讨论】:

    标签: asp.net css


    【解决方案1】:

    您可以根据角色创建主题 - AdminTheme(将包含 admin.css)和 GlobalTheme(将包含 global.css),或者您可以在给定后在 <head> 标签中动态写入 <link> 元素runat="Server" 属性。

    然后您可以根据角色在 PreInit 或 Init 事件中动态设置页面的主题。

    【讨论】:

      【解决方案2】:

      当然,当您输出 <head> 部分时,让 if 语句检查具有其“用户级别”的会话变量,然后输出相应的 <link> 标记(或 @import 行,具体取决于您如何使用更喜欢做你的 CSS)。

      【讨论】:

        【解决方案3】:

        试试this:

        protected void Page_Init(object sender, EventArgs e)
        {
            HtmlLink css = new HtmlLink();
            // add conditional logic to add correct css file        
            css.Href = "css/fancyforms.css"; 
            css.Attributes["rel"] = "stylesheet";
            css.Attributes["type"] = "text/css";
            css.Attributes["media"] = "all";
            Page.Header.Controls.Add(css);
        }
        

        【讨论】:

        • 收到此错误:无法修改 Controls 集合,因为该控件包含代码块(即 )。
        • 我发现我收到了这个错误,因为我还在标题中声明了我的 javascript 文件:
        • 如果你打算使用 语法,你可以把你的 CSS 包含的条件逻辑放在同一个地方
        • 我完成了这项工作,但无意的副作用是我无法使用适用的 CSS 拉起设计视图。呜呜。我想我应该小心我的要求。
        • Mike- 我认为您可以通过始终包含 global.css 来解决这个问题——对于每个人,并且只能选择性地包含管理员的 admin.css。
        【解决方案4】:

        如果您将页面的 head 元素设置为在服务器端运行,则可以将新的 HtmlGenericControl 注入到表示链接的标题中(如果用户处于特定角色)。

        【讨论】:

          【解决方案5】:

          如果您希望根据角色启用/禁用/显示/隐藏控件,这只不过是“默默无闻的安全性”,因为关闭样式或将浏览器设置为特定的 css 文件以覆盖实际提供的内容会轻松显示所有秘密。

          另一个问题是缓存。一些浏览器,比如 Opera/Firefox 很乐意缓存所有可缓存的内容,因此用户必须单击“重新加载页面”。您可能可以禁用缓存,但随后您的 css 将被重新下载,从而不必要地消耗流量。

          【讨论】:

          • 我同意并感谢您提供的信息。然而,这仅是出于审美目的。不过我很欣赏这个说明,所以我以后不会尝试使用相同的方法并遇到你提到的问题。
          猜你喜欢
          • 1970-01-01
          • 2011-12-09
          • 1970-01-01
          • 2018-01-26
          • 2015-01-05
          • 2013-10-21
          • 2016-09-10
          • 1970-01-01
          • 2013-04-10
          相关资源
          最近更新 更多