首页 > 语言 > 关键词  > ASP.NET最新资讯  > 正文

谈谈ASP.NET皮肤机制的实现

2010-11-02 17:08 · 稿源:铁目诱惑,www.cnblogs.com/tmyh

做一个WEB程序,能够在尽量修改极少程序代码的情况下,轻松制定皮肤以及切换皮肤,应该都是需要的,谁也不想,在网站界面想要改版的时候,要改一大片逻辑代码。

一个合格的皮肤机制体系的实现,应该要做到以下几点:

->页面模板上要极少拥有逻辑代码(如果模板上拥有大量逻辑代码,那估计这个也不叫作模板了)。

->能够轻松改变页面布局,同时不影响程序代码(.cs)。

->新模板的定制,基本上能由皮肤制作者参照旧模板自行完成,不需要开发人员太多介入。

->保持性能。

然后,来看看,都有哪些方法大家用来实现所谓的皮肤机制,同时进行各个方法的一些个人说明。

1. 改变页面调用的CSS文件来换肤。

这一个,严格上来讲,不应该算作皮肤机制。虽然CSS非常强大,也能够通过它来任意改变页面元素布局,但它的HTML始终是不变的,所以局限性是非常大的。

优点:完全不影响性能,甚至可以完全不由服务端代码来管理它的变换,可以使用JS来切换皮肤(由此,在我们有一套完美皮肤机制的情况下,这种方法,可以完全不与此机制冲突,让用户在客户端作更多的个性化)。

缺点:如果作为核心皮肤机制的话,非常有局限性。

示例:如QQ.COM, 114LA.COM上面的一些可点击的小色块,就是改变调用的CSS文件来实现换肤。

2. 读取模板文件,替换标识符为要显示的内容与数据输出。

这一个方法的灵活性比较高,每套皮肤可以有自己的布局,有自己的个性。

实现:比如模板中有一个标识$Subject,程序代码会把它替换成文章标题,然后有一个标识块<!—Loop[ArticleList]--><h1>$Subject</h1><div>$Content</div><!--/Loop-->,程序代码会把它替换成一个文章列表,最后输出处理完所有标识符的内容。

通常,我们会缓存读取到的模板内容,但字符串的替换始终不可避免,或者也会把替换过的内容也缓存起来,但这样子,就等于要缓存模板内容以及替换过的内容,占用了两份似乎挺重复内容的内存(为什么?不然总不该每次数据有改变的时候就去作IO操作读取操作读模板文件吧,这似乎比字符串替换性能更差)。

优点:模板灵活程度很高,可以随便改动页面布局。

缺点:影响性能,开发人员维护难,必须有特定的标识符来表示页面变量,后期维护可能会带来非常多的问题。

3.使用ASP.NET的App_Themes。

这一个方法,应该是极差的一个方法,根本只是ASP.NET的一个小纂头,鸡肋,基本上不实用。

实现:比如,定制一个BUTTON的样式是这样子的,<asp:buttonrunat="server" BackColor="lightblue"ForeColor="black" />,类似这样的代码,存在于.skin文件中。然后它的换肤机制如下,<%@ Page Language="C#" Theme="default" %>。在App_Themes目录下,是各套皮肤的独立文件夹,各个文件夹包含皮肤的样式以及图片文件等等,也可以包含.skin文件。

优点:只有ASP.NET才有

缺点:包含了第一种方法的缺点,.skin的样式定制方式还要严重依赖使用ASP.NET服务端控件,同时也影响性能,灵活性也极低。

4.动态载入.ASCX文件(ASP.NET用户控件)|| 使用.master(母版)。

这个方法,应该也是很多使用ASP.NET的人使用的方法,有时候,它还会与第三种方法结合使用。如果对性能需求不是很严格的话,中小型项目可以使用。

实现:使用LoadControl()动态载入.ASCX文件或(与)指定页面的MasterPageFile(目标皮肤文件夹的)实现(通常.ascx与.master还会结合使用)。

优点:灵活性极高,每个皮肤有独立的布局,直接使用了.CS文件的变量与方法ETC…甚至每套皮肤还有自己独立的代码文件。

缺点:影响性能。有兴趣可以自己去反编译LoadControl方法。同时,在页面要使用<%%>这种代码块,有时候感觉也有点不雅。

5.Xml + xslt

传说xml取代html是趋势??不清楚,不了解。应该不可能。此种方法我没有深入了解过,不过大概实现应该是要这样子?每一个XML(输出数据)会有一个对应的XSL文件(控制样式)。如下:

xml文件:

<?xml version="1.0"encoding="ISO-8859-1" ?>

<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>two of our famous Belgian Waffles with plenty of real maplesyrup</description>
<calories>650</calories>
</food>

<food>
<name>Cakes</name>
<price>$1.95</price>
<description>sweet cakes</description>
<calories>2650</calories>
</food>

</breakfast_menu>

xsl文件:

<?xmlversion="1.0" encoding="ISO-8859-1" ?>

<html xsl:version="1.0" xmlns:xsl="https://www.w3.org/1999/XSL/Transform"xmlns="https://www.w3.org/1999/xhtml">
<body style="font-family:Arial,helvetica,sans-serif;font-size:12pt;background-color:#EEEEEE">
<xsl:for-each select="breakfast_menu/food">
<div style="background-color:teal;color:white;padding:4px">
<span style="font-weight:bold;color:white">
<xsl:value-of select="name" />
</span>
<xsl:value-of select="price" />
</div>
<divstyle="margin-left:20px;margin-bottom:1em;font-size:10pt">
<xsl:value-of select="description" />
<span style="font-style:italic">
<xsl:value-of select="calories" />
</span>
</div>
</xsl:for-each>
</body>

</html>

这样子做,有什么好处么,我没有体验到。

6.读取模板文件,生成.aspx文件到每套皮肤的独立文件夹下,通过地址重写指定到这些文件夹。

这个方法的最终效果对于用户来说,和第二种方法应该是差不多的,优点就是性能比较高,而且还能直接使用.CS代码里面的变量方法ETC…另外,也可以不会有<%%>代码块的存在,可以存在自己的模板语言,如同第二种方法的$Subject, <!—Loop-->标识符一般。

优点:几乎不影响性能,只有第一次读取生成.ASPX文件需要损失性能。灵活性极高。模板代码可读性也可以实现到很高。

缺点:启动时需要读取分析时间(不过,这应该算是小问题),另外,有一套皮肤,它就要生成与之对应的一套.ASPX文件(当然这个可以解决)。

7.利用ASP.NET2.0开始才拥有的VirtualPathProvider来实现。

虚拟文件机制。这个,应该算是第六种方法的加强版。最终的效果,和第六种差不多,只是不会生成那些.ASPX文件而已,取而代之的,便是长驻在内存中。

实现:实现两个类,一个继承至VirtualPathProvider,一个继承至SkinFile。VirtualPathProvider里有个FileExists方法,重写成判断请求的路径是否是皮肤文件路径,如果是,GetFile就实例一个SkinFile(这一个SkinFile,我们会对模板进行处理,可以拥有自己的模板语言)。另外有一个GetCacheDependency方法,可以来将模板文件作为虚拟文件机制的缓存依赖文件,一旦模板文件被修改了,它就会再重新解析模板文件。这里先不作赘述,具体的,查看MSDN的相关文档,具可了解。

优点:与6相同。

缺点:第一次启动需要损失性能(但这也不可避免)。

8.还有更多的实现方法,还没用过,个人先不发表观点,比如:使用BuildProvider,但这一个,需要有比较强的词法分析与语法分析能力。

举报

  • 相关推荐
  • 绝地求生pubg延迟高、跳ping问题严重怎么办?方法全解析

    本文介绍了战术竞技游戏《绝地求生》(PUBG)的网络优化方案。游戏强调团队协作和实时决策,网络稳定性直接影响射击精度和移动流畅度。针对高延迟和网络波动问题,建议:1)使用迅游加速器优化线路;2)检查本地网络环境,重启路由器或更换DNS;3)关闭后台高带宽程序;4)验证游戏文件完整性;5)更新显卡驱动和系统补丁;6)优先使用有线连接。若问题依旧,可尝试更换网络时段或联系网络服务商。建议从基础连接问题开始逐步排查,再针对性调整资源配置。

  • steam账号注册教程——全网最新最全的方法

    本文介绍了Steam平台注册及下载安装的完整教程。主要内容包括:1.使用迅 游加速器优化网络环境,解决注册过程中的错误提示;2.详细说明客户端下载安装步骤,强调要选择简体中文和避开中文路径;3.分步指导账户注册流程,包括邮箱验证、地区选择和人机验证;4.提醒全程使用加速器保持网络稳定,避免注册中断。教程旨在帮助新手玩家顺利注册Steam账号并下载游戏,提升�

  • 镜子里的“灰色滤镜”:润致缇透如何让皮肤透出原生光

    文章探讨了现代年轻人面临的皮肤暗沉问题,指出单纯依靠表层护肤品难以持久改善肤质。作者以植物生长为喻,强调真皮层细胞健康才是皮肤透亮的关键。润致紫光精华通过"细胞级"抗衰逻辑,采用非交联透明质酸钠修复水合屏障,配合4种氨基酸促进胶原合成,提升细胞代谢效率,形成"改善环境-新生营养-加速代谢"的闭环系统。其独特配方能深入真皮层,从根源改善细胞微环境,帮助排出老废角质和黑色素,让皮肤由内而外恢复自然光泽,实现真正的"素颜美"。

  • 女子得荨麻疹能在皮肤划字 医生回应:无治愈手段

    一名女子在短视频平台发布视频,她患有荨麻疹,能用手在腿上划出 精忠报国”。对此,医生称该病无治愈手段,可药物缓解。 资料显示,荨麻疹俗称风疹块”,是一种常见的过敏性皮肤病,是由于皮肤、黏膜小血管扩张及渗透性增加出现的一种局限性水肿反应,临床上表现为大小不等的风团伴瘙痒,约20%的患者伴有血管性水肿。 荨麻疹的过敏原因很多,多种内外因素都可

  • 医生回应得荨麻疹女子在皮肤上划字:平时要多注意休息

    ​7月25日,一位女子在网络平台发布视频,称自己患上荨麻疹后出现奇特现象:手指在皮肤上轻轻一划,便会留下明显痕迹。 7月29日,针对这一现象,医生介绍,该女子所患为皮肤划痕症荨麻疹,其典型症状表现为皮肤在受到搔抓或钝物划过后,划痕处会迅速出现对应形状的风团样隆起,约半小时后自行消退。 "这种荨麻疹属于慢性复发性疾病,目前医学上尚未找到彻底治

  • Matrixport CEO John 出席 Foresight 2024 年度峰会,表示Matrixport将持续拥抱合规,提供专业资管服务

    Matrixport CEO John Ge在"Foresight2024"峰会上表示,合规化是加密行业主旋律。他指出当前加密市场缺乏新流量入场,资产管理趋向主流资产集中化,BTC、ETH等占比很高。随着加密ETF通过,合规属性增强,跨圈资管开始复苏。Matrixport将持续拥抱合规,为更多用户提供专业资管服务,帮助用户获取理性收益。公司成立于2019年,是亚洲最大的一站式加密金融服务平台,致力于构建�

  • AI日报:GPT-5-Auto现身Mac客户端;阿里开源WebAgent项目WebShaper;腾讯推X-Omni多模态模型

    【AI日报】今日AI领域重要动态:1)阿里开源WebAgent项目WebShaper,GAIA评测超越Claude4-Sonnet;2)Moonvalley推出草图转视频功能,支持手绘生成电影级视频;3)腾讯X-Omni模型实现图文理解重大突破;4)百度搜索测试AI应用中心入口;5)Midjourney+新增个性化推荐功能;6)GPT-5或于2025年夏季发布;7)Ollama推出桌面客户端;8)OWL团队开源多智能体协作工具Eigent;9)OpenAI年收入激增至120亿美元;10)英伟达H20芯片因安全风险被约谈;11)万兴科技天幕2.0模型国内排名第四,与华为云共建AI视频实验室。

  • 格力海尔上演“排位赛”!空调TOP3现交替震荡

    今夏高温席卷全国,空调市场迎来爆发式增长。美的以28.9%份额领跑,海尔26.8%居次,格力24.9%位列第三。高温酷暑成为市场格局变化关键变量,头部阵营竞争加剧:格力持续强化压缩机等核心部件自主研发优势,优化高端产品性能;海尔聚焦健康节能需求,升级"15秒速冷"等核心技术,加速下沉市场服务网点布局。行业正从稳态竞争转向动态博弈,三巨头在技术积累、渠道网络和品牌认知方面构筑的壁垒正面临新锐品牌冲击。当前正值空调行业开盘密集期,各品牌纷纷布局新冷年市场,行业格局演变值得关注。

  • 52TOYS携潮流IP矩阵亮相美国SDCC漫展 自有IP备受玩家追捧

    2025年7月24-27日,中国潮玩品牌52TOYS携旗下Pouka Pouka、CiCi Lu等原创IP系列亮相全球顶级动漫展圣地亚哥国际动漫展(SDCC),展位人气火爆。同期还参展了东京Wonder Festival夏季展。这是52TOYS首次在海外集中展示自有IP矩阵,其复古毛绒设计等产品获得跨文化消费者的喜爱。自2018年首次参展以来,52TOYS海外业务快速增长,2024年国际收入达1.47亿元,复合增长率超100%。目前品牌已在美国开设首家门店,通过多元场景触达全球消费者,持续推动中国潮玩文化出海。

  • 智能手表初代传奇落幕!苹果宣布Apple Watch Series 1将不再提供维修服务

    苹果公司近日宣布,Apple Watch Series 1正式走入历史,不再提供维修服务。 根据苹果的维修政策,产品停售后超过5年但未满7年会被归类为过时产品”,维修需视零件供应情况而定;停售后超过7年则为停产产品”,全面终止所有维修支持。 此次Apple Watch Series 1被降级为停产产品”,意味着未来官方将不再受理其维修服务。 值得注意的是,Apple Watch Series 1并非初代Apple Watch,而是