Never give up - LEO

人 只有在合适的地方 才能体现出最大的价值
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

为何改动web.config中的theme对页面没有影响

Posted on 2007-11-23 09:51  lizhiwen  阅读(1401)  评论(2编辑  收藏  举报
我有个同事,最近在学习asp.net 2.0的一些新特性。也做了一些例子,可是他在学习中遇到了一个问题,为了演示theme的使用方法,他做了一个简单的例子,在页面放了一个按钮和一个下拉框,下拉框里是不同theme的名称,点击按钮时可以改变当前的theme。点击按钮所作的操作就是把web.config中的<pages theme="" />中的theme主题名字更换掉。我们先不讨论这种方法和使用Page_PreInit之间的区别或者是谁优谁劣。
问题是他的这种做法在开发模式下进行调试是可行的,可是发布后确行不通,无论你变成什么样的theme,都看不到任何效果。刚开始我们以为是缓存的原因,进行多次测试后还是发现问题依旧。
既然是发布前和发布后有区别,那是不是编译以后程序把主题写死在程序里了,在程序运行的时候便不再动态的去读web.config呢?这只是一种猜测,又没办法测试,想想像dataconnection这些其它配置,都会动态的读,不可能就偏偏这个节点属性不读吧?
接着我又把编译后的.aspx文件打开来看(我发布时选择勾选第一项,所以可以动态更改页面文件)。发现一个共同的现象,见如下:
<%@ page language="C#" autoeventwireup="true" inherits="_Default, App_Web_qya65c65" theme="Theme1" %>
编译后的.aspx中尽然自己添加了一个theme属性,看到这里终于明白了。theme主题的设置优先级是控件大于页面,页面大于web.config,如果每个页面都有自己的theme,无论你怎么改变web.config中的配置都是没有作用的。
为什么在开发状态下可以呢?很简单,开发状态下,每个页面并没有theme这个属性,这个属性只是编译的时候,根据web.config的配置自动加上去的,不知道MS为什么要这样设置?弄得这个咚咚很别扭。。