在Asp.net上进行Web编程中了解页面中各事件的执行顺序

大家都知道,在Asp.net上进行Web编程中了解页面中各事件的执行顺序是非常有用的,可以有的放矢的将自己的一些处理程序放到指定的位置,以便取得正确的结果。本文详细的讲述了页中从初始化到显示的全过程事件,我看了以后觉得很有帮助,所以翻译出来以飨各位,翻译得不好多多见谅。如果需要阅读原文点这里。

 作者:Paul Wilson


l 初始化
² 当页面被提交请求第一个方法永远是构造函数。您可以在构造函数里面初始一些自定义属性或对象,不过这时候因为页面还没有被完全初始化所以多少会有些限制。特别地,您需要使用HttpContext对象。当前可以使用的对象包括QueryString, Form以及Cookies集合,还有Cache对象。注意:在构造函数里是不允许使用Session的。

² 下一个将执行的方法是AddParsedSubObject方法,这个方法将添加所有独立的控件并把页面组成一个控件集合树,这个方法经常被一些高级的页面模板解决方案(Page Template Solutions)重写以便添加页面内容到页面模板(Page Template)中一些特殊的控件中。这个方法递归应用到所有的页面控件及相应的的每个子控件,所有的控件都是在这个方法中开始最早的初始化。

² 页面类中下一个将执行的方法是DeterminePostBackMode。这个方法允许您修改IsPostBack的值及相关的事件。如果您需要从数据库中加载ViewState这个方法将特别有用,因为ViewState只有在IsPostBack为真的情况下才会进行恢复。返回空将会导致强制执行非回传,返回Request.Form则强制执行一个回传。除非在特殊情况下,否则并不建议去操作这个,因为这个还会影响其他的事件。

² 下一个将要执行的方法是OnInit方法,一般这是第一个真正被使用的方法。这个方法触发时,所有页面定义中的控件执行初始化,这意味着所有在页面中定义的值应用到相应的控件上。不过,ViewState和传回的值还不会应用到控件上,因此,任何被代码或用户改变的值还没有被恢复到控件上。这个方法通常是最好的创建、重创建动态控件的好地方。
l 恢复及加载
² 下一个方法,LoadPageStateFromPersistenceMedium只会在页面被回传的时候才会被执行。如果因为使用Session或自定义存储方式,您修改了后面将要提到的影响ViewState保存方式的方法SavePageStateToPersistenceMedium,则这个方法需要被重写。默认的实现中ViewState是一种Base64格式编码,并且被保存在页面的隐藏域中,您可以使用这篇文章中提及的方法修改ViewState按以上两种方式保存。注意:这个方法并没有真正加载ViewState到页面或页面控件中。

² 当得到ViewState后,下一个方法LoadViewSate,将以递归的方式恢复ViewState到页面及各个页面控件或子控件中。这个方法执行后,每个控件都将恢复到上一次的状态,但是用户提交的数据还没有应用到控件上,因为他们不是ViewState的一部分。这个方法主要用于恢复您在其他事件中动态生成的控件的值,他们的值是您手动保存在ViewSate中,并且现在已经失效。

² 下一个方法是ProcessPostData,这个方法也同样是回传的时候才会被执行,并且不允许被重写,这个是页面基类的私有方法。这个方法通过匹配控件的名称恢复相应的用户提交的控件的值,到这一步意味着整个页面都已经被完全恢复了。唯一要记住的是所有动态控件的创建必须在这个方法之前。这个方法也是记录后面的改变事件的方法。

² 下一个方法是OnLoad方法,通常这是用得最多的方法,因为这个方法是页面生存期第一个恢复了所有值的地方。大多数代码根据判断IsPostBack来决定是否重新设置控件状态。您也可以在这个方法中调用Validate并且检查IsValid的值。也可以在这个方法中创建动态控件,并且该控件的所有的方法都会被执行以追上当前页面的状态包括ViewSate,不过不包括回传的值。
l 事件处理
² 下一个方法还是ProcessPostData,实际上就是前一个方法的另一次调用,它仍然是只在回传的时候执行并且由于是私有方法不可以被重写。如果您是第一次看页面的运行轨迹也许会觉得这个方法有些多余。但实际上这个方法是必要的因为在OnLoad中创建的动态控件也需要他们回传的值。任何在这以后创建的控件将可以得到他们的ViewState,但是不能再得到他们的回传的值,并且不会触发任何值改变事件(Change Event)。

² 下一个方法,RaiseChangedEvents,也是只在回传页面中执行,并且也因为是基类的私有方法所有不能被继承。在整个页面生存期中,是在这儿根据之前的ProcessPostData记录的控件的值和提交的值是否不同来触发值改变事件。您也许需要调用Validate或者检查IsValid的值。这里并没有特别的说明多个值改变事件的执行先后顺序。

² 下一个方法,RaisePostBackEvent,同样是因为是基类的私有方法不能被继承,同样也是只在回传页面中执行。除非使用了AutoPostBack,不然这是实际提交表单事件执行的地方,特别是按钮或者其实使用javascript提交表单等。如果还没有被手动调用过并且使用了验证控件,那么Validate会被调用。注意IE中有个BUG有时会允许提交但却不触发任何事件。

² 下一个方法是OnPreRender,一般这是在客户端展现页面之前改变页面及其控件的最后一次机会。您也可以在这个方法里面创建动态控件,并且所有的方法都会被执行以追上当前页面的状态包括ViewSate,但是私有方法将不会被执行,这意味着不会有回传的值并且不会有事件触发。由于IE中的BUG,这是一个没有事件赶上PostBack的好地方。
l 保存及显示
² 下一个方法是SaveViewState,不论是否是回传页面,均会递归的执行以保存页面及其所有控件的ViewState。ViewState基本上保存所有与定义在aspx中的原始值不同的值,不管是被代码还是用户所改变。注意控件值是根据他们在页面的控件树中的位置来保存的,所以如果动态控件后来加到了错误的位置将会导致混乱。

² 下一个方法是SavePageStateToPersistenceMedium真正的保存页面的ViewSate。这个方法随同LoadPageStateFromPersistenceMediumg 一起被重写以便保存ViewState到Session或其它自定义数据,而不是用隐藏域。这对于低带宽的用户来说是很有帮助的。并且对于移动设备来说,Session是默认设置。下面这篇文章描述了使用以上两种方式保存ViewState的具体细节。注意在Asp.net中有个Bug:Asp.net要求必须提交__viewstate字段,即使是空的。

² 下一个方法是Render方法,该方法递归的创建并发送相应控件的html给浏览器。这个方法被一些页面模板方案重写以添加一些通用的页面头与脚而不使用服务器控件,他们总是有一些额外的东西。注意这儿的修改只能使用纯HTML,因为控件在这儿已经被生成了。您可以用StringBuilder,StringWriter,HtmlTextWriter捕获相应的HTML输出。

² 最后的方法是OnUnload,这个方法会调用相应的Dispose方法。这个方法提供机会以便清空该页面中使用的非托管资源,如关闭打开的文件句柄,以前打开的数据库连接等。注意这个方法是在页面已经发送到客户端以后执行的,所以它只有影响服务器对象,并且它不会显示在页面的显示轨迹中。这就是页面的生存期,对于每一次请求都是这么运行的。
l 作者简介(略)

表1:页面事件总结


方法回传控件


ConstructorAlwaysAll
AddParsedSubObjectAlwaysAll
DeterminePostBackModeAlwaysPage
OnInitAlwaysAll


LoadPageStateFromPersistenceMediumPostBackPage
LoadViewStatePostBackAll
ProcessPostData1PostBackPage
OnLoadAlwaysAll


ProcessPostData2PostBackPage
RaiseChangedEventsPostBackPage
RaisePostBackEventPostBackPage
OnPreRenderAlwaysAll


SaveViewStateAlwaysAll
SavePageStateToPersistenceMediumAlwaysPage
RenderAlwaysAll
OnUnloadAlwaysAll

 

2008奥运时刻表

2008奥运时刻表,供大家参考

高考试卷
1977年语文高考试卷

一、给下面这句话注音,要标调(3分)将正确的答案填写到下面的横线上
对待同志要象春天般温暖。


二、回答下列问题 将正确的答案填写到下面的横线上
1.指出下面句子中加粗的词属于什么词类(2分)
雷锋为(人民)服务的心最红

2.指出下面复杂词组中的每个词组属于哪种类型(4分)
恢复和发扬毛主席树立的优良传统和作风

3.分析句子成分(4分)
为了实现Communist主义的伟大理想,我要献出自己的毕生精力和整个生命。

4.分析多层复句的层次关系(3分)
因为我们是为人民服务的,所以,我们如果有缺点,就不怕别人批评指出。


三、什么叫拟人的修辞方法?举出一例(4分)
什么叫拟人的修辞方法?举出一例(4分)


四、写出毛主席诗《七律·人民解放军占领南京》的中心思想(6分)
钟山风雨起苍黄,百万雄师过大江。 虎踞龙盘今胜昔,天翻地覆慨而慷。 宜将剩勇追穷寇,不可沽名学霸王。 天若有情天亦老,人间正道是沧桑。


五、将下面两段文言文译成现代汉语,标清题号(14分)
1.陈胜,吴广皆次当行,为屯长。会天大雨,道不通,度已失期。失期,法皆斩。陈胜,吴广乃谋曰:“今亡亦死,举大计亦死;等死,死国可乎?”(7分)

2.夫夷以近,则游者众;险以远,则至者少。而世之奇伟瑰怪非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。(7分)


六、作文60分
文题:一在沸腾的日子里 二谈青年时代(二题任选其一)


 

 


 


 


 

1977年英语高考试题(北京市)

一、写出下列单词的变化形式(每空1分)
1.hero (名词复数)
2.enemy (名词复数)
3.railway (名词复数)
4.life (名词复数)
5.sheep (名词复数)
6.woman (名词复数)
7.stop (过去式) (过去分词) (现在分词)
8.die (过去式) (过去分词) (现在分词)
9.hurry (过去式) (过去分词) (现在分词)
10.rise (过去式) (过去分词) (现在分词)
11.win (过去式) (过去分词) (现在分词)
12.catch (过去式) (过去分词) (现在分词)

二、用英语回答下列问题(每题2分)
1.Are you a student?

2.How many people are there in your family?

3.Where were you born?

4.How old were you when you started to go to school?

5.How long have you been studying English?

6.You like to study English,don't you?

7.What subjects did you study at middle school?

8.What did you do after you finished middle school?


三、用所给动词的适当形式填空(每空1分)
1.As soon as our Party secretary (come) back from Tachai next week,we (begin)to build a reservoir.
2.When the teacher (come)into the classroom,the pupils (leave). Only Li Ping still there. He (repair) a broken chair. He (tell) the teacher that he (be) through in a few minutes.
3.What (be) you (do) here?
I (write) a letter to nay brother.
I (not hear) from him for a long time.
4.My father (not work) in Peking. He is in Taching. He (be) there for ten years. He often (write) to us and (tell) us about his work and life there.

四、按句子所给的汉语内容,用英语完成下列各句(每题4分)
1.The magnificent building (矗立在tian~an-door广场上) is the Memorial Hall of Chairman Mao.
2.Great changes have taken place in our country (自从我们在party和华主席领导下粉碎“四人帮”以来).
3.The people of Hsingtai will always remember (我们敬爱的周总理来看望他们的那一天).
4.(如果明天不下雨),we will have a basketball match with PLA men.
5.Is this the subject (你最感兴趣的)?
6.The old peasant asked me (是否到过延安).

五、将下列短文译成英语(满分20分)
我是红星公社的一个新社员。两年前离开城市到农村去插队落户。在贫下中农的帮助下,我提高了政治觉悟,学会了各种农活。今年一月,party支部叫我去当小学教师。从那以后,我一直教语文。我多么热爱我的工作和我的学生啊!
为了达到四个现代化的伟大目标,party号召我们青年人学习科学技术。现在我正在参加大学入学考试。我希望能考上大学。我一定为革命努力学习,争取做到又红又专。如果考不上,就回到农村去,在三大革命运动中更加努力工作。我将为把我们的祖国建设成为一个伟大的、现代化的社会主义强国作出贡献。


 

 


 


 


 

1978年高考历史试题

一、填充题:(共20分。答案填在题上空白处)
1.我国商朝劳动人民用铜和锡的合金铸造的工具、武器等,称为器。它标志着生产力发展到了新的水平。
2.唐太宗时,吐蕃首领和结婚,促进了汉藏两族间的经济文化交流,密切了汉藏两族间的关系。
3.元末农民大起义中,朱升向提出了“高筑墙、广积粮、缓称王”的建议。
4.明末,李自成领导的农民起义,提出了的革命口号。
5.鸦片战争中,广州北郊(地名)人民奋起抗击英国侵略军,显示了中国人民不畏Q B,敢于同敌人战斗的英雄气概。
6.从十九世纪五十年代开始的半个世纪中,沙俄帝国主义先后霸占我国领土平方公里。
7.1924年,在中国Communistparty的帮助下改组了国民party,确定了“、、”的三大政策。
8.1927年12月11日,张太雷、叶挺、叶剑英等同志领导了起义。
9.年,同志和同志率领部分南昌起义的部队和湘南农民军到井冈山同毛主席领导的革命队伍胜利会师。
10.1938年5月,毛主席发表了《》,指明了抗日战争发展的客观规律和胜利道路,批判了论和论,极大地鼓舞和增强了全国人民争取抗战胜利的信心。
11.我国印刷术创始于隋朝,到北宋时,毕升又发明了印刷术。
12.第一次世界大战前,帝国主义国家形成了、、三国同盟和、、三国协约两个军事集团。
13.以和为代表的德国古典哲学,是马克思主义的三个来源之一。
14.马克思、恩格斯在《Communistparty宣言》中,最后向国际无产阶级发出了伟大号召:“!”
15.第二次世界大战前,英、法帝国主义推行政策,于1938年9月和德、意法西斯签订了协定,纵容希特勒侵略。


 


二、简要写出下列年代中世界史或中国史上的一件大事:(共5分,每题0.5分。答案写在每一个年代的后面)
1.公元前221年——
2.公元前209年——
3.公元1640年——(外国)
4.公元1776年——(外国)
5.公元1789年——(外国)
6.公元1840年——
7.公元1871年——(外国)
8.公元1900年——
9.公元1911年——
10.公元1917年——(外国)

三、在地图上画出太平天国从金田起义到定都天京的进军路线(将起、止、经过的共六个城市按进军路线连成一线,不得多连)。(5分)


 

四、简要解释名词:(每题5分,共25分。在每个名词下空白处作答)
1.《史记》

2.官渡之战

3.郑和

4.孟良崮战役

5.巴黎和会


五、问答题:(共45分。在试卷上作答,不必抄题,但须标明题号。)
1.从鸦片战争前后政治经济状况的变化,分析我国怎样开始沦为半殖民地半封建社会。(15分)

2.扼要举出周〈!-->恩来同志在我国民主革命各个时期的主要革命活动。(18分)

3.举出第二次世界大战中帝国主义发动突然袭击的三个战例,并说明其历史教训。(12分)


 

 


 

 


 


1978年高考地理试题

一、填充题(答案直接填写在试题的空白处,每空0.5分):(共10分)
1.革命历史名城遵义位于我国省的北部。
2.大庆、大港和油田是我国新建的三大油田。
3.我国的三角洲是著名的“鱼米之乡”,三角洲是重要的蔗糖产地。
4.渔场是我国最大的渔场。
5.铁路西起兰州,东至连云港,在郑州与铁路交会。
6.太行山脉以东是平原,以西是高原。
7.我国最大的内流河是河。
8.峰是世界第一高峰。
9.柬埔寨的首都是。的首都是布加勒斯特。
10.东南亚的主要矿产是和石油。
11.运河是连接印度洋和大西洋的最近通道,战略地位十分重要。
12.洲的气候带呈明显的南北对称分布。
13.世界最长的山脉是山脉。
14.和两国之间的五大湖是世界上最大的淡水湖群。
15.从政治、经济重心和人口分布来看,传统上苏联是个洲国家。

二、填图(答案直接填写在附图上):(共15分)
1.在中国政区填充图上填出代表下列地理名称的数字顺序号:北京市①、山西省②、吉林省③、台湾省④、湖南省⑤、新疆维吾尔自治区⑥、云南省⑦、乌苏里江⑧、渤海⑨、南沙群岛⑩。(10分)

2.在朝鲜略图上填出:鸭绿江、图们江、黄海、日本海、朝鲜海峡。(5分)
纪念高考恢复30年,重做77.78高考题,你会吗?
三、读图(答案写在试卷上):(共10分)
对照朝鲜略图所标示的内容,写出:1.朝鲜首都的大致经纬度;2.朝鲜海岸的特征;3.朝鲜地形大势;4.朝鲜气候类型;5.新义州到釜山的实地直线距离(已量出朝鲜略图上的两地直线距离约为8厘米)。


四、名词解释(答案写在试卷上):(共15分)
1.等高线

2.外力作用

3.信风

4.寒潮

5.拉丁美洲


五、判断题(每题所列的四个答案中,只有一个是正确的,在你认为是正确的那一个答案下面划一横线:(共10分)
1.世界上流经国家最多的国际河流是:①尼罗河,②湄公河,③亚马孙河,④多瑙河。(4分)
2.日本是一个工业发达但工业基础脆弱的资本主义国家,主要原因是:①大量依赖美国的投资和军事订货;②原料、燃料和产品市场严重依赖国外;③重视工业,轻视农业;④工业部门畸形发展,布局不合理。(6分)

六、问答题(答案写在试卷上):(共40分)
1.我国南、北方的外流河有哪些不同特点?为什么会有这些不同特点?(10分)

2.有人在冬至时从阿根廷首都布宜诺斯艾利斯出发,正好三个月后到达位于赤道上的厄瓜多尔首都基多,正好又三个月后到达美国首都华盛顿。试问:(15分)①他出发时,布宜诺斯艾利斯是什么季节?为什么?②他到达基多时,布宜诺斯艾利斯、基多、华盛顿的昼夜长短如何?为什么?③他到达华盛顿时,华盛顿是什么季节?为什么?

3.结合你学过的地理知识,简要回答:(15分)①我国冬、夏季气温分布的特点怎样?②我国降水的地区分布和季节变化怎样?③我国气温和降水的特点为农业生产提供了哪些有利条件?


 

 


 


 


 

1978年高考政治试题

一、解释下列名词(每题4分,共16分)
1.生产力

2.阶级

3.实践

4.矛盾的普遍性


二、问答题(每题4分,共24分)
1.人类社会从低级向高级发展有哪几种社会形态?

2.party的新民主主义革命的总路线是什么?

3.party的社会主义建设总路线是什么?发展国民经济的总方针是什么?

4.按照五届人大批准的十年规划,到1985年我国粮食和钢的产量分别要达到多少?

5.根据毛主席关于三个世界划分的理论,指出第一、二、三世界各包括哪些国家和地区?举例说明。
(外国)
6.认识运动的总规律是什么?


三、简述题(每题10分,共20分)
1.我国社会主义革命和社会主义建设新时期的总任务是什么?为什么说实现总任务是关系我国前途和命运的大问题?

2.唯物辩证法和形而上学的根本区别是什么?批判“四人帮”宣扬形而上学的一个谬论。


四、论述题(每题20分,共40分)
1.用物质第一性、意识第二性的原理,论述发扬party的从实际出发、实事求是优良作风的重要性。

2.无产阶级专政的国家为什么必须对人民实行民主,对敌人实行专政?批判“四人帮”颠倒敌我关系,对人民实行法西斯专政的反革命罪行。


 

 


 

 


 

1978年全国高考化学试题

一、(本题共17分)
甲元素的核电荷数为17,乙元素的正二价离子和氩原子(原子序数为18)的电子层结构相同.回答以下问题:
1.甲元素在周期表里位于第周期,第主族,元素符号是,它的最高正价氧化物相应水化物的分子式是.
2.乙元素在周期表里位于第周期,第主族,元素符号是,它的最高正价氧化物相应水化物的分子式是。
3.这两种元素以什么类型的化学键相结合?

这种化合物的固体能否导电?

它的水溶液能否导电?

4.推断乙元素氢氧化物和氢氧化钡的碱性哪个更强?

5.推断甲元素负一价离子和碘的负一价离子的还原能力哪个较强?


二、(本题共16分)
1."一克分子任何物质的体积都是22.4升."这句话是否正确?若不正确加以改正.

2.碳酸钾水溶液的pH值是等于7、还是大于7、还是小于7?说明理由.

3.从1000毫升2N的硫酸溶液中取出10毫升,这10毫升溶液的当量浓度,克分子浓度(摩尔浓度)各是多少?

4.铜跟稀盐酸能否起反应?铜跟浓硫酸能否起反应?能起反应的写出化学反应方程式,不能起反应的说明理由.


三、(本题共13分)
1.写出下列有机化合物的名称或结构式,并指出哪些是同分异构体:

(4)乙酸乙酯 (5)2-甲基丙烷

2.乙烯和乙炔各在特定的条件下都能和水发生加成反应,分别写出它们的化学反应方程式(有机化合物必须写结构式),并注明生成物的名称.


四、(本题共18分)
1.现在实验室只有下列三种装置,若要同时制取氢气、氧气和氯气,各应选用哪一种装置?(指出甲、乙、丙即可,不必另画图.)


2.图(乙)装置的长颈漏斗为什么必须插到溶液里?

3.写出制备这三种气体的化学反应方程式并注明反应条件,分别指明哪种元素被氧化?哪种元素被还原?标明电子转移的方向?(用箭头表示)和总数.


五、(本题共16分)
有一包白色粉末,它是由KCl、(NH4)2SO4、(NH4)2CO3、Ca(NO3)2和BaCl2五种化合物中的两种混和而成的.今按以下步骤进行实验:
第一步:白色粉末和熟石灰一起研磨时,能放出无色气体,这种气体能使湿润的红石蕊试纸变蓝;
第二步:另取少量白色粉末,加足量的水并充分搅拌,有白色沉淀存在,用过滤法进行分离,该沉淀不溶于X;
第三步:向上述分离所得的澄清滤液里加入X银溶液,又有白色沉淀产生,再加入X,沉淀仍不消失.
问:1.根据上述实验现象,每一步可得出什么结论?

2.这包白色粉末是由哪两种化合物混和而成的?

3.写出有关的化学反应方程式,若是离子反应,只要求写简化离子方程式.


六、(本题共20分)
1.32%的X溶液(比重为1.2)的克分子浓度是多少?

2.取铜和银组成的合金300毫克,溶于X,以适量水稀释后,加入0.1M的氯化钠溶液24.0毫升,恰好使银完全沉淀.求该合金中铜和银的百分组成.
注:①原子量:Ag108 Cl35.5 Cu63.5 O16.0 H1.0 N14.0 Na23.0
②最后的计算结果要求写到小数点后第一位,小数点后第二位四舍五入.
纪念高考恢复30年,重做77.78高考题,你会吗?


 

 


 

 


 

 


 

1978年全国高考物理试题

一、填空白
1.当穿过一个线圈的发生变化时,线圈中产生感应电动势;感应电动势的大小,除与线圈的匝数成正比外,还与成正比.
2.单摆在摆动过程中,其速度和加速度都是随时间变化的.从最大位移处向平衡位置运动的过程中,速度越来越,加速度越来越.
3.在天然放射性元素的放射线中,已经查明,a射线是,γ射线是.
4.在20℃的空气中,声音的传播速度是340米/秒.如果它的频率是100赫兹,那么它的波长是
5.两个点电荷之间距离为a,相互作用力为f;如果距离变为2a,则相互作用力变为

二、简答题
如下图所示的电路中,三个电阻的阻值分别是R1=2欧姆,R2=4欧姆,R3=4欧姆.电池的电动势E=4.2伏特,内阻r=0.2欧姆,求:

1.

2.

3.两个开关都接通时,通过R1的电流强度I1.


三、简答题
用照相机对着一个物体照相,已知镜头(相当于一个凸透镜)的焦距为13.5厘米,当底片与镜头的距离为15厘米时,在底片上成5厘米高的像.1.求物体的高;

2.绘出光路图.


四、简答题
一个安培-伏特两用表的电路如图所示,电流计G的量程是0.001安培,内阻是100欧姆,两个电阻的阻值是R1=9900欧姆,R2=1.01欧姆.问:

1.双刀双掷电键接到哪边是安培计,接到哪边是伏特计?

2.安培计、伏特计的量程各是多大?


五、简答题
一个14克重的比重计(如图所示),放在水中,水面在它的刻度A处;放在煤油中,油面在它的刻度B处.已知煤油的比重d=0.8克/厘米3,比重计刻度部分的玻璃管外半径r=0.75厘米,求AB之间距离.



七、简答题
一质量M=2千克的木块,放在高h=0.8米的光滑桌面上,被一个水平方向飞来的子弹打落在地面上(子弹留在木块中),落地点与桌边的水平距离S=1.6米,子弹的质量m=10克.
1.求子弹击中木块时的速度.

2.子弹射入木块时产生的热量,若90%被子弹吸收,子弹的温度能升高多少?(设子弹的比热为0.09卡/克·度,取g=10米/秒2,空气阻力不计)
纪念高考恢复30年,重做77.78高考题,你会吗?


 

String.IsNullOrEmpty()函数的一个误区

从用vs2005开始,很多人在判断string类型时.喜欢用String.IsNullOrEmpty()来完成判断为""的情况.

但今天无意间发现.其中根本不包括我们潜意思中想当然有的Trim()功能,所以会认为

string.IsNullOrEmpty("  ")为true,其实是为false.

形象调查附件
形象调查附件
javascript

一些新收集的脚本样例。

一些资料
一、 导言

  我们知道,ASP.net应用程序事实是在服务器上运行的,用户的请求要不断地送往远程的服务器服务器执行完本地的程序后把重新装载页面再发送客户端。所以就出现了不断刷新的问题,页面不断闪烁。用户不厌其烦,运行效率也大大4降低,服务器的负荷加重。事实,客户端的请求在某一时刻只是通过向 Web 服务器提交新的请求来检索对用户输入所做的响应。这种情况下,开发人员可以使用 JavaScript 在客户端上加载所有响应,从而提供更好的用户体验。遗憾的是,在很多情况下,不必将所有响应都返回或加载到 JavaScript 要更好,只返回所要的结果,执行过程仍然在服务器上运行。AJAX 提供了一种新的中间选择,能够在维持及时响应和灵活性的同时利用基于服务器的应用程序。

  AJAX依靠服务器作为中介来分发和处理请求。为了完成这项工作,.net封装类依赖于客户端的请求对象,而xmlHttpRequest对象被大部分的浏览器支持,因此使用这个对象是一个不错的解决方案。

  因此,为了实现不刷新的页面,我们的客户端页面做成静态页面。静态页面通过Ajax.net调用.net类的方法。这是一种最简洁又高效的解决方案。

  二、 如何应用Ajax.net

  1.在工程中引入Ajax.dll文件。

  Ajax.dll是微软开发的应用在asp.net上的一个类库文件。该类库封装了XmlHttpRequest请求服务器的实现细节,是Ajax知识应用在asp.net平台上的解决技术。在.net项目中,添加上对其的引用,然后就可以开始使用ajax.dll封装进行开发了。

  2.在web.config中设置HttpHandle

  为了使其可以工作,第一步必须做的是在web.config中安装设置封装包的HttpHandle,不去详细解释HttpHandle是如何工作的,我们只需要了解他们可以用来处理asp.net请求。例如,所有的目的为*.aspx的请求可以通过System.Web.UI.PageHandlerFactory类发送到控制句柄,简单的说,我们把任何向ajax/*.ashx的请求发送到Ajax.PageHandlerFactory的请求处理句柄。

  3.编写服务端函数

  现在我们编写服务器端函数,他们可以被客户端异步的调用。尽管现在还不能支持全部的返回类型,我们仍坚持服务器端添加功能。在codebehind文件的页面类里,添加下面的方法:

[Ajax.AjaxMethod()]
public int ServerSideAdd(int firstNumber, int secondNumber)
{
 return firstNumber + secondNumber;
}

  注意,这个函数有Ajax.AjaxMethod()定制属性,属性服务会告知ajax封装类为此方法创建一个javascript代理,这样才能被客户端调用。

  三、 应用实例(点击下载源码)

  我们的应用程序主要是对数据库的操作,数据库的数据通过页面的表格呈现,页面完成增加、删除、更新、查询等功能。更主要的是它是一个通用的并且实现方法极为巧妙的例子。任何页面没有刷新现象并且代码十分精巧。下面的就通过Ajax技术实现这些功能。

  ·建立工程HttpForAjax,并在您的工程中引入Ajax.dll文件。

  ·在您的Web.config中加上。

<httpHandlers>
<add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax"/>
</httpHandlers>

  ·建立您的HTML页。

  1. 向工程里添加HTML页InfoClass.htm。该页面完成查询、常用工具及数据展现等功能。

  页面主要放了四个DIV,一个是树" divTree "。一个是查询区叫"divFindTable"的,一个是工具栏叫
"divToolbar"的,一个是数据区叫"divDataGrid"的。如下图:


  2. 在 <HEAD>与</HEAD>间加入一些引用如下:

<script src=js/Xml.js></script>
<link href="css/myStyle.css" type="text/css" rel="stylesheet">
<script src="/HttpForAjax/ajax/common.ashx" type="text/javascript"></script>
<script src="/HttpForAjax/ajax/Ttyu.AjaxData,HttpForAjax.ashx" type="text/javascript"></script>


  说明:Xml.js是用javascript写的一些客户端程序。

  myStyle.css为样式风格文件。

  common.ashx为调用Ajax的公用方法。

  HttpForAjax.ashx为下面我们要用Ajax编写的类的引用。其中HttpForAjax为工程的命名空间。

  Ttyu.AjaxData为自己开发的类,其中Ttyu为命名空间,AjaxData为类名。

  3. 用javascript编写脚本方法,

function Init()
{
 DomTree=new dhtmlXTreeObject(document.getElementById('divTree'),"100%","100%",0);
 DomTree.setImagePath("imgs/");
 DomTree.enableDragAndDrop(true)
 DomTree.setDragHandler(myDragHandler);
 DomTree.setOnClickHandler(SelectTreeNode);
 var s= AjaxData.GetXmlTree().value;

 DomTree.loadXMLString(s);
 DomTree.openItem("R_1");
 SelectTreeNode("R_1");
 divToolbar.innerHTML=AjaxData.GetToolBarTable(TableName).value;
 divDataGrid.innerHTML=GetTableOuterHTML(TableName);
}

  Init方法通过Ajax的GetXmlTree方法得到树的内容,GetToolBarTable取得工具栏的内容。通过GetTableOuterHTML方法取得物理表tInfoClass的所有数据并通过表格展现出来。

function Find()
{
 var Table=AjaxData.GetXmlFindTable("年级名称 like '%"+txtName.value +"%'");
 divDataGrid.innerHTML=Table.value;
}

  查询方法Find()是通过Ajax的GetXmlFindTable方法按年级名称查询并把结果展现出来。

function OpenAddWeb()
{
 var RetID =OpenAddWin('InfoClass_edit.aspx?IsAdd=true',370,300);
 if(RetID==-1) return;
 InsertRow(DataGrid1,RetID);
}

  OpenAddWeb方法打开InfoClass_edit.aspx页在该页上完成增加数据的功能。如果返回值不为-1则表示有新数据增加的并把数据插入到表格的最后一行。RetID表示最后一行的ID.

function OpenEditWeb(ThisCell)
{
 var ID=ThisCell.previousSibling.previousSibling.innerText;
 var RetID =OpenAddWin("InfoClass_edit.aspx?ID="+ID+"&IsAdd=false",370,300);
 if(RetID==-1) return;
 //有更新行
 var CurrRow=ThisCell.parentElement
 SetRowText(CurrRow);
 // SetRowText(CurrRow,RetDataRow);
}

  OpenEditWeb方法是当用户点击的单元格后打开InfoClass_edit.aspx页在该页上完成编辑该行数据的功能。如有更新行则把当前行的内容更换..


  ·建立Ajax类。(见文件AjaxData.cs)命名空间为Ttyu,类名为AjaxData。

  1. 定义静态变量mDt。mDt是读取到物理表的数据并保存在内存中的数据表对象。我们的主要操作都是靠它完成。定义为静态的是我们不希望反复访问数据库。我们一次性读取,永久使用。

static public DataTable mDt;

  2.定义我们的主要方法。在每个方法的上行加上[Ajax.AjaxMethod()]。

//得到表TableName的所得数据,以XML字符串返回
[Ajax.AjaxMethod()]
public string GetTableOuterHTML(string TableName)
{
 DataTable dt=db.DB.GetDataTable(TableName);
 mDt=dt;
 return db.GetTableOuterHTML(dt.DefaultView);
}

  GetTableOuterHTML方法是由物理表名读取到内存中并通过其视图得到以XML格式的Table。这里我们读取后保存在mDt中。用数据表的视图是我们的查询也通过该方法呈现数据。

//得到表TableName的所得数据,以XML字符串返回
[Ajax.AjaxMethod()]
public string GetXmlFindTable(string RowFilter)
{
 DataTable Dt=mDt;
 DataView dv=Dt.DefaultView;
 dv.RowFilter=RowFilter;
 return db.GetTableOuterHTML(dv);
}

  GetXmlFindTable是按查询条件从mDt中查询到数据并返回给客户端。

//删除行
[Ajax.AjaxMethod()]
public bool DeleteRow(string TableName,int ID)
{
 string SQL = "delete from " + TableName + " where ID=" + ID;
 bool isSuccess= db.DB.ExecuteSQL(SQL);
 if(isSuccess)
 {
  DataRow dr=mDt.Select("ID="+ID)[0];
  mDt.Rows.Remove(dr);
 }
 return isSuccess;
}

  DeleteRow是删除物理表的一行,并在mDt中也同步地删除。

//把数据行转化为数组返回
[Ajax.AjaxMethod()]
public object GetDataRow(int iID)
{
 DataRow dr=mDt.Select("ID="+iID)[0];
 return dr.ItemArray;//数字类型不能为空
}
GetDataRow是从内存表mDt得到ID号为iID的一行,通过数组方式返回给客户端。
[Ajax.AjaxMethod()]
public string GetToolBarTable(string TableName)
{
 return db.GetToolBarTable(TableName);
}

  GetToolBarTable是组织成工具栏的内容返回给客户端。

  ·建立业务数据类ttyuPKData。(见文件ttyuPKData.cs)命名空间为Ttyu,类名为ttyuPKData。

  该类中有些常用的方法。

  public bool InsertDataRow(DataRow dr,int BeginColumnIndex)为向物理表中把数据行dr插入,BeginColumnIndex表示从开始的列插入。

  public bool UpdateDataRow(DataRow dr,int BeginColumnIndex,string Filter) 为向物理表中把数据行dr的数据更新,BeginColumnIndex表示开始更新的列。Filter表示所要更新的行。是一筛选条件。

  public string GetTableOuterHTML(DataView dv)是个通用的把数据视图展现为Table的方法。并通过class定义样式。

//由一个数据视图得到该表的表头及所有数据,以XML格式的表字符串返回
public string GetTableOuterHTML(DataView dv)
{
StringBuilder ret = new StringBuilder();
ret.Append("<table class='DataGrid' id='DataGrid1' cellspacing=1 cellpadding=4>" );
ret.Append("<tr class='DataGridHeaderStyle'>");
ret.Append("<td width='5'> <input type='checkbox' onclick='SelectAll(this)'></td> ");
//标题
foreach(System.Data.DataColumn dc in dv.Table.Columns )
{
if(dc.Ordinal==0) //该列隐藏
ret.Append("<td class='IDColumn'>"+dc.ColumnName+"</td>");
else
ret.Append("<td>"+dc.ColumnName+"</td>");
}
ret.Append("</tr>");
//这时是视图中筛选后的数据
foreach(DataRowView drv in dv)
{
DataRow dr=drv.Row;//dv.Table.RowsIdea;
ret.Append(GetRowOuterHTML(dr));
}
ret.Append("</table>");
return ret.ToString ();
}

  ·建立页面数据编辑类(见文件PageEdit.cs)命名空间为Ttyu.Web,类名为PageEdit。

  该类是个通用的通过继承的技巧实现了所有编辑页(包括增加、修改数据)功能的统一处理。页中不需要一行代码。

  结论

  Ajax技术可以给客户端提供丰富的客户体验,而ajax.net为您容易的实现这样强大的功能提供了可能。静态页面是不出现刷新问题的。我们的静态页面通过Ajax完全可与asp.net结合起来。通过.net进行后台的管理。前台通过javascript调用。这样完美的结合是解决问题的最佳方法
水晶报表资料

1。新建工程,添加oledbdataadapter,配制数据库,生成数据集  
  2。添加水晶报表,使用项目数据,ADO。NET数据集生成报表  
  3。添加reportdocument控件,选择工程名.报表名做为名称  
  4。添加CrystalReportViewer控件,什么属性都别改  
  以上4步完成后,在希望显示报表的地方添加一下代码  
                  OleDbDataAdapter1.Fill(DataSet11,   "用户登录表")  
                  crystalReport11.SetDataSource(DataSet11)  
                  CrystalReportViewer1.ReportSource   =   crystalReport11  
  就不会弹出登录提示框了,不过原因我还是不清楚,我在这里连用户名,密码都没设置过,更不要说数据源了,所以我想这一定是通过DATASET来连接的

 

从服务器打印基于   Web   的报表  
  如果用户无权访问打印导出的报表所需的应用程序,您可能希望使他们能够从服务器打印报表。对于服务器端打印,报表在   Web   服务器上生成,并被打印到安装在   Web   服务器上的打印机。用户可以选择距离他们最近的打印机,并让服务器处理打印。    
   
  服务器端打印的要求是:    
   
  打印机必须安装在   Web   服务器上    
  本地   SYSTEM   帐户有权访问打印机    
  对包含   .NET   Framework   的配置设置的   Machine.config   文件进行了编辑,以赋予   ASPNET   辅助进程对服务器上系统设置的访问权限。    
  注意       实现服务器端打印涉及到更改服务器上的默认权限,对于对   Internet   公开的应用程序建议不要这么做。  
   
  如果想使用户能够打印在   Web   上访问的整个多页报表,您有下列选项:    
   
  使用Web   窗体   Viewer   工具栏上的“打印”按钮将报表导出为   PDF。    
  注意       报表部件   Viewer   没有此选项。  
  导出报表为可以由客户端的现有应用程序打印的格式。    
  使用PrintToPrinter   方法从服务器打印报表。    
  将报表作为一个连续的页提供以通过   Internet   Explorer   浏览器在客户端启用打印。    
   
  使用   PrintOptions.PrinterName   属性将报表的指定页输出到选定的打印机上。如果未选择打印机,则将使用报表中指定的默认打印机。   
   

[C#]    
  public   virtual   void   PrintToPrinter   (int   nCopies   ,   bool   collated   ,   int   startPageN   ,   int   endPageN   );  

 参数  
  nCopies    
  指明要打印的份数。    
  collated    
  指明是否逐份打印。    
  startPageN    
  指明要打印的第一页。    
  endPageN    
  指明要打印的最后一页。    
  备注  
  若要打印所有页,请将   startPageN   参数和   endPageN   参数设置为零。

 

 [C#]    
  private   void   PrintReport(string   printerName)  
  {  
        PageMargins   margins;  
   
        //   获取   PageMargins   结构并设置  
        //   报表的边距。  
        margins   =   Report.PrintOptions.PageMargins;  
        margins.bottomMargin   =   350;  
        margins.leftMargin   =   350;  
        margins.rightMargin   =   350;  
        margins.topMargin   =   350;  
        //   应用页边距。  
        Report.PrintOptions.ApplyPageMargins(margins);  
   
        //   选择打印机。  
        Report.PrintOptions.PrinterName   =   printerName;  
   
        //   打印报表。将   startPageN   和   endPageN  
        //   参数设置为   0   表示打印所有页。  
        Report.PrintToPrinter(1,   false,0,0);  
  }  
要求  
  命名空间:CrystalDecisions.CrystalReports.Engine  
   
  如果用户无权访问打印导出的报表所需的应用程序,并且服务器端打印存在安全性或访问权限问题,您可能需要使用户能够从他们的浏览器打印报表。此方法将整个报表作为一个连续的页显示在   Web   窗体   Viewer   控件中,因而能够使用浏览器的打印功能。    
   
  在应用程序中,可以在现有   Web   窗体   Viewer   旁边添加一个按钮,该按钮可以将客户端重定向到新的、在浏览器中将整个报表显示为一个连续页的   Web   窗体   Viewer。可以对第二个窗体上的查看器进行格式化,以便禁用组树和工具栏,并将查看器的   SeparatePages   属性设置为   False。    
   
  注意       这种打印方法有一个局限,即无法控制页眉、页脚和分页符的定位。  
  crReportDocument   =   New   Income_Statement()  
  CrystalReportViewer1.ReportSource   =   crReportDocument  
  CrystalReportViewer1.SeparatePages   =   False  
  CrystalReportViewer1.DisplayGroupTree   =   False  
  CrystalReportViewer1.DisplayToolbar   =   False  

Crystal Report的资料
   之前在论坛中经常有人问起在VS2005中使用水晶报表(Crystal Report 10)如何用DataSet实现动态的数据源绑定?关于这个问题我研究了一下,找到了新的解决方案。
    在以前VS2003中可以采用PUSH模式推报表,可以用如下的代码实现:       
   

         con = new SqlConnection(Session["SQLCONNECTION"].ToString());
         strSql 
= "SELECT * FROM htOrder";
         scm 
= new SqlCommand(strSql, con);
         sda 
= new SqlDataAdapter(scm);
         ds 
= new DataSet();
         sda.Fill(ds, 
" order ");
         rptOrder.SetDataSource(ds.Tables[
"order"]);
         crOrder.ReportSource 
= rptOrder;    

         
        VS2005中不再支持“embedded report”嵌入式报表,只能采用非嵌入式报表的方法拉数据,下面是典型的代码:
        

    //绑定报表数据
            private void BindCrystalReports()
        
{
                
string path1 = Server.MapPath("~\\Report\\");
                
string path2 = path1 + "repOrder.rpt";
                ReportDocument repDoc 
= new ReportDocument();
                repDoc.Load(path2);
                SetDBLogonForReport(repDoc);          
//设置数据登录信息
                crOrder.ReportSource = repDoc; 
                
string selectionFormula = "{htOrder.htID} =" + txtHtID.Text.Trim();//设置报表数据筛选公式
                repDoc.DataDefinition.RecordSelectionFormula = selectFormula;
                crOrder. DataBind ();     
        }

        
//设置登录信息
        private void SetDBLogonForReport(ReportDocument reportDocument)
    
{
        
try
        
{
                ConnectionInfo connectionInfo 
= new ConnectionInfo();
                connectionInfo.ServerName 
= ConfigurationManager.AppSettings["ServerName"];
                connectionInfo.DatabaseName 
= ConfigurationManager.AppSettings["DatabaseName"];
                connectionInfo.UserID 
= ConfigurationManager.AppSettings["UserID"];
                connectionInfo.Password 
= ConfigurationManager.AppSettings["Password"];
                Tables tables 
= reportDocument.Database.Tables;
               
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
           
{
                    TableLogOnInfo tableLogonInfo 
= table.LogOnInfo;
                    tableLogonInfo.ConnectionInfo 
= connectionInfo;
                    table.ApplyLogOnInfo(tableLogonInfo);
                }

        }

           
catch
      
{
                lblNote.Text 
= "<script>alert('数据库登录信息不正确!');</script>";
           }

}

                  
        这种方式是不是太频繁琐了,在数据结构更改或者查询条件发生变化时必须要再次更改报表设置,那么在VS2005中水晶报表有没有更简洁的方法呢?最好不用写代码就能搞定呢?有,那就是新的数据绑定控件CrystalReportSource,这个控件与SqlDataSource数据源绑定控件一起连用就可以用SQL表达式作数据源推数据了。下面是实现的步骤:

        1. 建立水晶报表,注意报表要用OLE DB ADO方式连接数据源,这样可以省去报表登录窗口的弹出。
        2. 在设计视图中拖拉报表控件CrystalReportViewer,点击右上角智能标签设置报表数据源,选择报表文件,自动生成CrystalReportSource,这时在设计视图中将显示出报表界面,水晶报表将自动用初始数据填充报表字段。注意这里有个小Bug,如果报表在子目录中,选择报表文件将自动用相对路径表示,这时报表显示会出错,应改成绝对路径才可以。
            <Report FileName="report\rptOrder.rpt">这里应改成:<Report FileName="..\report\rptOrder.rpt">
        3.拖拉一个数据源控件SqlDataSource(也可以用ObjectDataSource),按向导生成数据源,这里可以筛选数据,根据情况选择各类数据源。            
        4.
如何将CrystalReportSourceSqlDataSource两个控件连接在一起呢?可以这样:选择CrystalReportSource控件点击右侧属性中数据栏,再点击Report选择DataSource,在这个数据源集合编辑器选择数据源指定报表名称即可。(下面的Parameters是用来选择报表参数用的)

        经过这几个步骤,就可以运行程序显示报表啦,怎么样不用写一句代码吧?

具体代码可参考如下:

<CR:CrystalReportViewer ID="crOrder" runat="server" AutoDataBind="True"  ReportSourceID="ReportSourceOrder"  BestFitPage="False" DisplayToolbar="False" DisplayGroupTree="False" Height="1042px" Width="775px" EnableParameterPrompt="False" />        
        
<CR:CrystalReportSource ID="ReportSourceOrder" runat="server">
            
<Report FileName="..\report\rptOrder.rpt">                           
                    
<DataSources>
                            
<CR:DataSourceRef DataSourceID="SqlDataSourceOrder" TableName="htOrder" />
                    
</DataSources>
              
</Report>
        
</CR:CrystalReportSource>
        
<asp:SqlDataSource ID="SqlDataSourceOrder" runat="server" ConnectionString="<%$ ConnectionStrings:cc_2005 %>"
            SelectCommand
="SELECT * FROM [htOrder] "></asp:SqlDataSource>
http://blog.csdn.net/haibodotnet/category/13322.aspx?Show=All
Web打印控件,免费的ScriptX

<html>
<head>
<script defer> 
       function SetPrintSettings() { 
              // -- advanced features  ,未曾使用过,有待确认。
              /* /
              factory.printing.SetMarginMeasure(2)    // measure margins in inches 
              factory.SetPageRange(false, 1, 3)          // need pages from 1 to 3 
              factory.printing.printer = "HP DeskJet 870C" 
              factory.printing.copies = 2 
              factory.printing.collate = true 
              factory.printing.paperSize = "A4" debugger;
              factory.printing.paperSource = "Manual feed" */

              // -- basic features  使用过
              factory.printing.paperSize = 4
              factory.printing.header = "This is MeadCo" ;
              factory.printing.footer = "Advanced Printing by ScriptX" ;
              factory.printing.portrait = false ;    //方向,true
              factory.printing.leftMargin = 1.0 ;
              factory.printing.topMargin = 1.0 ;
              factory.printing.rightMargin = 1.0  ;
              factory.printing.bottomMargin = 1.0 ;
               
             factory.printing.Print(true)      //直接打印,true ,好像不起作用,总是弹出选择打印机窗口
            // factory.printing.PageSetup()   //打印设置
           //  factory.printing.Preview()  ;       //打印预览
          
           factory.printing.SetMarginMeasure(2) // set inches


       } 
</script>
</head>
<body>
 <object id="factory" viewastext  style="display:none"
  classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
  codebase="file:///C:/Documents%20and%20Settings/FOUNDER/桌面/smsx.cab#Version=6,2,433,70">
</object>
 Hello World!!
 <input type="button" name="button1" onclick="SetPrintSettings();" value="Button"/>
 </body>
</html>

Time的判断

<script language='javascript'>
function keypress(obj)
{
 var kindex = window.event.keyCode;
 if(kindex < 48 || kindex >57)
 {
  window.event.keyCode = 0;
  return;
 }
 debugger;
 var ovalue = obj.value;
 var re = document.selection.createRange();
 re.text = String.fromCharCode(kindex);
 var nvalue = obj.value; 
 re.text = "";
 
 switch(nvalue.length)
 {
  case 1:if(kindex > 51)
   obj.value = ovalue;   
   break;
  case 2:if(parseInt(nvalue,10)>36)
   obj.value = ovalue;
   else
   obj.value = nvalue + ":";
   break;
  case 3:check3value(obj,ovalue,nvalue);
   break;
  case 4:check4value(obj,ovalue,nvalue);
   break;
  case 5:check5value(obj,ovalue,nvalue);
   break;
  default:break;
 }
 obj.focus();
 //window.event.keyCode = 0;
}
function check5value(obj,ovalue,nvalue)
{
 var i = nvalue.indexOf(":");
 nvalue = nvalue.replace(":","");
 switch(i)
 {
  case 2:if(parseInt(nvalue,10) >3600)
   obj.value = ovalue;   
   break;
  default:obj.value = ovalue;
  break;
 }
}
function check4value(obj,ovalue,nvalue)
{
 var i = nvalue.indexOf(":");
 switch(i)
 {  
  case 1:if(parseInt(nvalue.substring(2),10) >59)
   obj.value = ovalue;
   break;
  case 2:nvalue = nvalue.replace(":","");
   if(parseInt(nvalue,10) >360)
   obj.value = ovalue;
   break;
  default:obj.value = ovalue;
  break;
 }
}

function check3value(obj,ovalue,nvalue)
{
 var i = nvalue.indexOf(":");
 switch(i)
 {  
  case 1:break;
  case 2:if(parseInt(nvalue,10) >36)
   obj.value = ovalue;
   break;
  default:obj.value = ovalue;
  break;
 }
}</script>

JavaScript调试小工具

调试javascript的好方法
1、从微软网站下载MS Script Debugger并安装,这是下载地址:
http://download.microsoft.com/download/winscript56/install/1.0a/NT45XP/EN-US/scd10en.exe

2、修改IE的设置:
IE的选项-->高级,有两个选项默认是钩选的:
Disable Script Debugging(Internet Explorer)
Disable Script Debugging(Other)
中文可能是“禁用脚本调试”,去掉这两项的钩选。

3、在需要调试的地方加上debugger;例如: <script language=javascript>
..
debugger;
..
</script>
这就是一个断点,当运行到这里的时候就会中断进入调试模式:

SimpleAppsetting And Config的样例,Win版。
SimpleAppsetting And Config的样例,Win版。
SimpleAppsetting And Config的样例,Web版。
SimpleAppsetting And Config的样例,Web版,下载运行。
让XP中的IIS可以同时发布ASP.NET1.1和2.0
在XP中,IIS的功能不是很强大,至少提供给我们操作的不是很多。像网站管理中,不能新建,鼠标右击,提供的操作中没有新建一项(2000,2003中有),其下还没有应用池一项,所以要在其中同时放置ASP.NET1.1和2.0的。如之前ASP.NET1.1很正常。则2.0程序很可能会遇到一点点麻烦。其主要原因是ASPNET权限问题引起的,有时你手动设置了该权限。但可能还没有作用,此时,你要考虑应用以下命令行:aspnet_regiis -ga ASPNET