首页 > 编程 > .NET > 正文

ASP.NET事件小探讨

2024-07-10 12:57:09
字体:
来源:转载
供稿:网友
今天早上做了asp.net页面计数器的实验,用的是简单的文本文件来存储计数器的数值(
实际是以byte类型值进行的存储),原理代码可见我以前发的《简单计数器实现程序》。

今天的任务是把原来winform中的文件读写放入到asp.net的behindcode中,这就会出现
些许问题。

问题一:文件路径
在asp.net的behindcode中写文件路径就不能因为文件在这个应用程序的目录下直接写文
件名来调用了。
例:
以前使用winform编程的时候,如果文本文件count.txt跟程序的可执行文件在一个目录
下可直接使用filestream fs=file.open("count.txt",filemode.open);来对文件进行读
取。
而在asp.net中,web应用程序的路径是"虚路径",意思是没有映射为系统当前应用程序
默认路径(系统当前默认路径应该为c:/windows/system32,原因是此路径下面有web应用
程序可供调用的丰富的win32api)。那么虚拟路径的根是存储在什么地方呢?应该是在i
is的配置文件中,在c#中这个路径就是通过server.mappath()函数来映射的。
例:
如果count.txt文件在此web应用程序的目录下,可以通过server.mappath("../count.tx
t");来映射到这个文件。注:直接写文件名会找不到此文件,显示的是文件无法读取的
信息。

问题二:
web应用程序事件问题
其实asp.net的通讯及访问模型中有三个层次
第一个层次就是application,是web应用程序层
此层次的变量周期为整个application,不过在application_start和application_end两
个事件中运行的代码,只有在应用程序开始或结束的时候才能进行(服务器启动/关闭或
者强制iis把此应用程序启动/关闭的时候),因此在这两个事件中写计数器代码是无用
的。
第二个层次是session,是web应用程序的一个通信层
一次与用户的通信(从以一个ip访问应用程序开始,到这个ip与应用程序断开或超时断
开)对计数器来说是最有价值的体现,也是一个页面计数器的功能。
不过问题也随之出现了:
session的session_start和session_end事件是在一次通讯的开始和结束才被激发的。这
样如果在session_start实件中写代码的话,只有一次通讯开始时访问的页面上才有计数
器的显示,而在刷新后页面显示计数器的部分就不会再显示了,怎么办?不用着急请继
续往下看。
第三个层次是page层,是每个页面即web document的控制对象层。
我们知道了一个web页面有一个page层,我们就会了解,一个页面调出的时候将会调用pa
在此事件中添加计数器计数的代码,计数器就会因为页面刷新一次而增加一,这是我们
不愿意看到的。
怎么办?
很简单,在session_start中写计数器计数的代码,在page_load中写计数器显示的代码
,这样就可以实现我们需要的功能了。

希望通过这篇文章,能够帮助初学者理解这几个web应用程序层次及对应的事件,有时可
能有对问题的错误见解,希望能有高手指教。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表