2012-02-07 166 views
6

是否可以为ASP.NET网站创建默认主题?默认ASP.NET主题

例如,如果我有一个名为"Default"主题,香港专业教育学院选定一个主题叫做"NewTheme",我引用这并不在"NewTheme"存在,但在"Default"主题确实存在像一个文件:

<asp:image id="img" runat="server" ImageUrl="~/Images/image.jpg" /> 

如果它不存在于"/App_Themes/NewTheme/Images/image.jpg"那么可以从"/App_Themes/Default/Images/image.jpg"中取出吗?

此外,如果一个CSS类不存在于“NewTheme”中,但它在“Default”中,那么是否可以使用“Default”?事实上,我认为如果它首先采用了所有的默认样式,然后覆盖任何与“NewTheme”有冲突的内容,那将会更好。

我知道全局引用的工作方式与此,因为如果香港专业教育学院选择"es"本地化和关键并不在webreference.resx.es文件存在,但它在webreference.resx,然后ITLL采取从那里的价值。

我认为这将是ASP.NET主题的重要功能,因为我可以想象不同的主题只会改变某些图像,并且某些样式会发生更改。我无法想象每个主题的每个图像和每个风格总是完全不同。因此,如果没有这个功能,它将成为复制样式/图像的情况,我不是一个粉丝(显而易见的原因!)。

+3

赏金就在这!我喜欢app_themes的功能,但不能继承基本主题是一大痛苦。 – Malk 2012-02-07 22:41:22

回答

1

此功能未内置于ASP.NET。不过,您可以很容易地实现它:

  1. 在Global.asax或自定义HTTP模块中挂起HttpApplication.BeginRequest事件。
  2. 在“/ App_Themes/NewTheme /”下查找带有网址的请求。
  3. 检查文件是否在HttpRequest.PhysicalPath存在。
  4. 如果该文件不存在,请致电HttpContext.RewritePath,并将请求URL中的“NewTheme”替换为“Default”。
+0

请参阅我的编辑。你认为像这样的解决方案可以用于CSS吗? – Curt 2012-02-08 09:19:22

+0

对于CSS,我建议您在“/App_Themes/NewTheme/stylesheet.css”的顶部放置'@import url(“../ Default/stylesheet.css”)',这样所有正常的CSS级联规则就像通常。 – 2012-02-08 14:51:40

+0

@Curt:这个答案不起作用吗,不清楚,还是你在寻找详细的代码? – 2012-02-23 03:00:47

2

所描述的默认主题不受ASP.NET支持。经常有ThemesStyleSheetTheme s,但动态更改它们对于页面请求级别比对单个控件或静态文件更有用。

您可以使用URL重写或路由对静态文件的主题进行自己的版本编码 - 但这并不是真正的主题。

对于像<asp:Image>这样的控件,您可以覆盖它们并根据某些“主题”文件夹层次结构中存在的文件修改属性,如ImageUrl。然后使用标记映射来替换该控件的所有实例,而不需要任何标记更改。

FWIW,Global.asax中的BeginRequest事件仅针对IIS中的动态文件(Cassini也称它为静态)调用。为了在IIS中支持静态,您需要一个HttpModule,并且还需要将IIS配置为以集成模式运行。