王朝网络
分享
 
 
 

【转载】文本型单页面ASP.NET计数器

王朝asp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

看到一个非常简单的计数器,也许会很有用

前面我介绍了system.io空间下的文件操作对象,这里我讲解一下如何制作应用于特定页面的计数器。每个计数器都需要一个相应的文件来存储当前的访问量,那么如何建立用来技术的文件、如何对技术文件进行读写以及如何显示当前访问量是我们需要解决的问题。

首先 获取技术文件

因为是单页面计数器,并不应用于特定页面,所以必须能根据当前页面的不同而获取或者生成不同的技术文件。最好把技术文件和页面起相同的名字起不同的扩展名。

我们把获取计数器文件部分的代码包装成一个函数:

function mike_getfilename() as string

dim mike_path as string

dim mike_position as integer

mike_path=request.servervariables("path_translated")

mike_position=instrrev(mike_path,".")

mike_getfilename=mid(mike_path,1,mike_position) & "count"

end function

使用request对象的servervariables("PATH_TRANSLATED")方法来获取当前页面的绝对路径。

instrRev函数返回某字符串在另一个字符串中出现的从结尾计起的位置

mid函数用于从字符串中返回指定数目的字符 Mid(string, start[, length])

参数

string:字符串表达式,从中返回字符。如果 string 包含 Null,则返回 Null。

Start:string 中被提取的字符部分的开始位置。如果 start 超过了 string 中字符的数目,Mid 将返回零长度字符串 ("")。

Length:要返回的字符数。如果省略或 length 超过文本的字符数(包括 start 处的字符),将返回字符串中从 start 到字符串结束的所有字符

使用mid(mike_path,1,mike_position)将当前页面的文件名和.一起截取下来,然后把我们定义的扩展名连到串上,就得到了我们需要的计数文件名。

然后 读取计数文件

下面我们要进行的操作是对计数文件进行读写操作,首先我们使用先前定义的mike_getfilename()函数得到当前文件名:

dim mike_pathname as string

mike_pathname=mike_getfilename()

实例化一个对该文件的读取通道,即创建一个filestream对象:

mike_stream=new filestream(mike_pathname,filemode.openorcreate,fileaccess.read)

防止出现异常即该页面第一次被访问,计数文件使用openorcreate创建。

下面使用streamreader对象对文件进行读取操作:

mike_readobj=new streamreader(mike_stream)

mike_str=mike_readobj.readline()

mike_readobj.close()

这里我们应用到了前面介绍过的streamreader对象的构造函数生成streamreader对象,然后使用readline()方法来读取文件内容,需要特别注意的是

mike_readobj.close()

这个语句很重要,否则当前计数文件就一直被streamreader对象独占,下面对文件进行写操作时就会失败,所以必须使用close()方法释放被streamreader对象占用的文件和系统资源。

其次 显示当前访问量

当前访问量可以采用response.write()方法来显示,这种方法的缺点是不能调整计数器的显示位置。这里我们利用asp.net中的服务器控件label,在业务逻辑代码区设置该控件的text属性。这样就体现出业务逻辑和页面逻辑代码分离的优势,不过毕竟还是在一个文件中,我个人推荐用代码后置即前台页面放在aspx文件,后台文件保存成一个类文件。

count=cint(mike_str)

count+=1

mikecat.text=count

我们通过streamreader读取出来的计数文件转换为数值,然后计数值加1,再在LABEL控件显示出来。此时的mikecat就是label控件。

最后 写入计数器文件

进行写入操作之前仍需要建立一个写入通道:

mike_stream=new filestream(mike_pathname,filemode.open,fileaccess.write)

由于此时计数文件已经存在因此我们仅用到了filemode.open

我们使用streamwriter对象的构造函数来生成一个streamwriter对象来进行文件写操作:

mike_writerobj=new streamwriter(mike_stream)

mike_writerobj.writeline(count)

mike_writerobj.close()

下面给出全部计数器代码,大家可以了解一下其中细节

<%@ Page Language="VB" Debug="True" Explicit="True"%>

<%@ Import Namespace="System.IO" %>

<html>

<head>

<title> New ASP.NET Document </title>

</head>

<body bgcolor="#FFFFFF" topmargin="0" marginheight="0">

<script runat="server" language="vb">

Sub Page_Load(Source As Object, E As EventArgs)

If Not page.ispostback then

Dim count As integer

Dim mike_stream As filestream

Dim mike_pathname,mike_str As string

Dim mike_readobj As streamreader

Dim mike_writerobj As streamwriter

mike_pathname=mike_getfilename()

mike_stream=New filestream(mike_pathname,filemode.openorcreate,fileaccess.read)

mike_readobj=New streamreader(mike_stream)

mike_str=mike_readobj.readline()

mike_readobj.close()

count=cint(mike_str)

count+=1

mikecat.text=count

mike_stream=New filestream(mike_pathname,filemode.open,fileaccess.write)

mike_writerobj=New streamwriter(mike_stream)

mike_writerobj.writeline(count)

mike_writerobj.close()

End if

End Sub

Function mike_getfilename() As string

Dim mike_path As string

Dim mike_position As integer

mike_path=request.servervariables("PATH_TRANSLATED")

mike_position=instrrev(mike_path,".")

mike_getfilename=mid(mike_path,1,mike_position) & "count"

End function

</script>

<form runat="server" method="">

<asp:Label id="mikecat" runat="server"/>

</form>

</body>

</html>

=======================================

我们这里稍加修改即成为漂亮的图形计数器,两种计数器在文件读写方面完全一致。

在ASP.NET中用于装载图片的控件是image控件,因此下面就采用动态生成image控件的方法来实现动态生成图形。这个容器我们采用<div id="mike_div" runat="server"/>

这里我们需要准备10张图,分别是0~9十个数字的图片(取名0~9.gif),我们采用下面的方法动态生成图像:

dim mike_img as image

dim mike_graph as string

dim i as integer

count=cint(mike_str)+1

for i=1 to len(count)

mike_img=new image()

mike_graph=mid(count,i,1)

mike_img.imageurl=mike_graph & ".gif"

mike_div.controls.add(mike_img)

next

首先我们根据当前的计数字符串的长度来决定需要生成的图形的长度。 new 指令来动态生成image控件,然后用imageurl属性指定要显示的图片路径。最后使用mike_div的add方法将当前生成的image控件加入到容器的控件集合中。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有