这里是Cat in dotNET的Random Clippings系列,专门向大家推荐.NET相关的英文技术文章,每期推荐两篇文章,第一篇适合于英语技术文章阅读的入门者练习阅读能力,而第二篇则适合于进阶练习与技术学习。

主题切换控件 (Theme Switcher Control)

大家都用过ASP.NET 2.0的主题了吧,在为网站增加几个不同的主题后很多人都会发现了一个问题,那就是系统不提供一个控件给用户自由选择他们当前所想看到的主题。这篇文章告诉你如何继承自ListBox做一个简单的主题切换控件,让用户可以随时更改他们浏览时所选用的主题。

既然是阅读训练专题,那么我们就来慢慢看它的介绍。首先Introduction介绍了这个控件,"persistent through the use of a cookie"让我们了解到用户的选择将通过Cookies来持久。

然后Using the control告诉我们如何使用这个控件,包括添加主题、添加配置信息到web.config和添加控件到页面这3个步骤。这3个步骤对于大家来说都很容易,看着说明来做就是了:

  1. Add multiple themes - 添加多个主题,这个在VS2005中很容易完成,首先通过添加ASP.NET特殊目录添加App_Theme目录,然后在其下面添加子目录作为主题,并且放入相关的css文件和skin文件。
  2. Add the Http Module handler - 添加Http Module配置,这只需要打开web.config并将文章中加亮的代码放到正确的那一节就行了。
  3. Create a page for switching themes - 创建切换主题的页面,这包括通过@Register命令注册控件和使用控件两步,这个控件有两个属性可以设置。
    • "Set the AllowNoTheme property to 'true' if you want to allow the user to choose no theme at all",意思是设置AllowNoTheme属性为true后用户将能够选择无主题。
    • "set the NoThemeText property if you don't want to use the default text 'none'",无主题的选项默认显示为"none",而你可以通过NoThemeText属性更改此文本信息。

注意"Add the Http Module handler"这一节下面有个Warning,"this setting causes a server error in every page having a <head> tag without the runat="server" attribute",意思是说如果页面的<head>标签没注明runat="server"则会导致错误。

接着How it works解释了这个控件是怎么工作的,代码是很容易读懂的。控件继承自ListBox,通过使用IO有关的类遍历App_Theme下的子目录并在ListBox中将它们的名称显示出来,然后根据用户选择保存Cookies。另外还有一个IHttpModule,它在PreRender阶段进行处理,如果处理当前请求的IHttpHandler是一个Page对象,那么它就根据Cookies为此Page应用主题。

最后Known issues,也就是“已知问题”,它说明了如果使用了Server.Transfer则目标Page无法正常应用Theme。为什么呢?大家可以自己思考一下,这和它应用Theme的方式有关。

ExpressionBuilder (The CodeExpressionBuilder)

"A very exciting new feature in ASP.NET 2.0 is Expression Builders",没错,ExpressionBuilder确实是ASP.NET 2.0中一个让人兴奋的新功能,它让我们方便的在SqlDataSource上声明性设置ConnectionString:<%$ ConnectionStrings: MyConnectionString %>,又或者是使用语言资源:<%$ resources: ResourceKey %>。

除了这些功能以外,它还能干什么呢?"Now lets take it one step further",让我们迈步走远一点来看看。

可能很多人都尝试过这样设置属性:Text="<%= DateTime.Now %>",但发现会导致错误。而使用文章中提供的CodeExpressionBuilder后,你可以这样做:Text="<%$ Code: DateTime.Now %>",并且得到你之前预期的效果。

到底这是怎么实现的呢?通过阅读上面引用的文章,你就知道其中的奥妙以及ExpressionBuilder的强大了。Infinities Loop的文章是非常好读的,中间通过大量的加亮代码或截图来解释说明,可以好像看连环画一样仅看图不看字。

最后,如果你觉得Random Clipping的推荐不错,可以考虑长期订阅Cat in dotNET,这样你将不会错过将来的任何一篇推荐。这是我第一次写这个系列,大家有什么好的建议可以直接在评论中写,例如希望更加侧重英语方面的解释或者更加侧重技术方面的解释,又或者希望增加推荐文章的数量,我会根据评论在下一期中改进的。

转载于:https://www.cnblogs.com/cathsfz/archive/2006/12/02/580142.html

英语阅读推荐:主题切换控件 ExpressionBuilder相关推荐

  1. openlayer 图层上下_OpenLayers实现图层切换控件

    OpenLayers并没有封装图层切换的控件,所以我们需要自己来实现图层控件. 自定义图层切换控件的原理很简单:显示某个图层时,将其他图层隐藏. 完整代码: layerSwitch.html: 图层切 ...

  2. Android学习笔记26:图片切换控件ImageSwitcher的使用

    在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...

  3. Xamarin自定义布局系列——PivotPage(多页面切换控件)

    原文:Xamarin自定义布局系列--PivotPage(多页面切换控件) PivotPage ---- 多页面切换控件 PivotPage是一个多页面切换控件,类似安卓中的ViewPager和UWP ...

  4. 05 地图添加底图切换控件

    本文讲述如何在地图上添加地图切换控件.通过底图切换控件,我们可以实现当前地图和的地图之间的一个切换,效果如下: 如上所示,通过右上角的底图切换控件可以实现两地图之间的切换显示,具体操作如下: 添加底图 ...

  5. 英语阅读推荐:使用AJAX+WF+LINQ制作Google IG式首页

    如果你既想学习ASP.NET AJAX,又想学习Windows Workflow Foundation,还想学习LINQ(包括DLinq和XLinq),能够一次过满足你三个愿望的除了Kinder出奇蛋 ...

  6. C#入门学习-----图书阅读器(WPF 用户控件技术)

    欢迎大家提出意见,一起讨论! 转载请标明是引用于 http://blog.csdn.net/chenyujing1234 需要源码请与我联系. 编译平台:VS2008 + .Net Framework ...

  7. 推荐.NET CF控件(Resco MobileForms Toolkit)

    来自于著名的Reso,提供的.NET CF控件有很多,当然不是免费的,网站上可下载的是Evaluation version,在开发时和部署后运行时都会有版本提示.下载安装后控件会加载到Visual S ...

  8. 推荐打印打印控件Lodop,支持IE,firefox,chrome等位内核的浏览器

    WEB打印控件Lodop(V6.x)使用说明及样例   Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现 复杂打印.控件功能强大,却简单易用, ...

  9. vscode-tab按键失效变为切换控件解决

    前段时间使用vscode的时候tab按键不知道为什么变成控件切换,卸载了也没用,一度无法使用vscode,转为Atom.其实出现这种情况有三可能,一种情况是按到了vscode的ctrl+M命令,变为v ...

最新文章

  1. 阿里云虚拟机mysql_打开虚拟机里mysql
  2. java synchronized 参数_个人对synchronized锁的参数理解,如果有误望指出
  3. php 过滤中英文以外,PHP-php过滤重复中英文字符串
  4. 匿名内部类----java
  5. deployment:声明式的升级应用
  6. git添加多远端服务器并且实现push代码
  7. pre textarea code标签区别
  8. SpringMVC拦截器-路径语法-略坑
  9. SSM框架之Spring MVC(四)异常处理和拦截器实现
  10. 推荐系统-Task04前后端基础及交互
  11. 计算机二级C语言程序设计 第一章 程序设计基本概念
  12. 蚁群算法 c语言,基本蚁群算法代码C版
  13. 基于imcrop,裁剪人脸视频
  14. 悼念打dota的日子
  15. ISFP——思想起决定作用
  16. spring aop统一进行日常及异常的处理
  17. ssh连接失败报错:Socket error Event: 32 Error: 10053.
  18. spark 并行处理_如何使用Spark集群并行处理大数据
  19. I - 最大公约数GCD
  20. 关于LuaGC算法的演化概述

热门文章

  1. Google Drive的linux客户端使用(还没弄完)
  2. 5-3 神经网络算法预测销量高低(改进版,消除了一些warning)
  3. 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
  4. Flutter插件开发《Podspec语法整理》
  5. 2019.3.18 区块链论文翻译
  6. java 遍历类路径
  7. 404错误,500错误页面的代表意思
  8. sql 2012先分离迁移mdf mlf 文件到别的机器后附加 数据库成只读的修复方法
  9. PHP Module
  10. python日志模块的封装