【发布时间】:2010-10-19 15:17:19
【问题描述】:
我想根据用户的会员角色有条件地链接 CSS 文件。管理员应该链接我的 admin.css 文件,而其他人(其他角色和匿名用户)应该显示我的 global.css 文件。这个可以吗?
【问题讨论】:
我想根据用户的会员角色有条件地链接 CSS 文件。管理员应该链接我的 admin.css 文件,而其他人(其他角色和匿名用户)应该显示我的 global.css 文件。这个可以吗?
【问题讨论】:
您可以根据角色创建主题 - AdminTheme(将包含 admin.css)和 GlobalTheme(将包含 global.css),或者您可以在给定后在 <head> 标签中动态写入 <link> 元素runat="Server" 属性。
然后您可以根据角色在 PreInit 或 Init 事件中动态设置页面的主题。
【讨论】:
当然,当您输出 <head> 部分时,让 if 语句检查具有其“用户级别”的会话变量,然后输出相应的 <link> 标记(或 @import 行,具体取决于您如何使用更喜欢做你的 CSS)。
【讨论】:
试试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);
}
【讨论】:
如果您将页面的 head 元素设置为在服务器端运行,则可以将新的 HtmlGenericControl 注入到表示链接的标题中(如果用户处于特定角色)。
【讨论】:
如果您希望根据角色启用/禁用/显示/隐藏控件,这只不过是“默默无闻的安全性”,因为关闭样式或将浏览器设置为特定的 css 文件以覆盖实际提供的内容会轻松显示所有秘密。
另一个问题是缓存。一些浏览器,比如 Opera/Firefox 很乐意缓存所有可缓存的内容,因此用户必须单击“重新加载页面”。您可能可以禁用缓存,但随后您的 css 将被重新下载,从而不必要地消耗流量。
【讨论】: