欢迎光临
我们一直在努力

ASP中遍历和操作Application对象的集合-ASP教程,ASP技巧

建站超值云服务器,限时71元/月

为了能够正常使用,必须把它们放到服务器上的一个虚拟应用程序内,并且把所提供的global.asa文件放到该应用程序的根目录中。最简单的办法是把global.asa文件放到缺省web网站的根目录(缺省情况下是c:/inetpub/wwwroot)中。

  对任何已有的global.asa文件重命名是一个好办法,可以在以后对该文件进行恢复。

  1. 显示application集合的内容

  aspcounter对象是staticobjects集合的一个成员(通过<object>元素进行定义),但是其余部份(由server.createobject实例化)是contents集合的成员。

  可以看到使用global.asa例子网页放到这些集合中的值,这在前面已经看到:

<!– declare instance of the aspcounter component with
application-level scope //–>
<object id=”aspcounter” runat=”server” scope=”applicatoin”
progid=”mswc.counters”>
</object>


<script language=”vbscript” runat=”server”>
sub application_onstart()
‘create an instance of an ado connection with application-level scope
set application(“adoconnection”) = server.createobject(“adodb.connection”)
dim vararray(3) ‘create a variant array and fill it
vararray(0) = “this is a”
vararray(1) = “variant array”
vararray(2) = “stored in the”
vararray(3) = “application object”
application(“variant_array”) = vararray ‘store it in thd application
application(“start_time”) = cstr(now) ‘store the date/time as a string
application(“visit_count”) = 0 ‘set counter variable to zero
end sub


</script>

  (1) 遍历contents集合的代码

  为了遍历contents集合,可使用一个for each … next结构。集合中的每一项可以是一个简单的variant类型变量、一个variant数组或者一个对象的引用。因为需要对每种类型的值进行不同的处理,所以就不得不对每一个进行检查来判别其类型。

  在vbscript中可使用vartype函数完成这个工作。这里使用isobject和isarray函数代替:

for each objitem in application.contents
if isobject(application.contents(objitem)) then
response.write “object reference: ‘” & objitem & “’

elseif isarray(application.contents(objitem)) then
response.write “array: ‘” & objitem & “’ contents are:

vararray = application.contents(objitem)
‘note: the following only works with a one-dimensional array
for intloop = 0 to ubound(vararray)
response.write “ index(“ & intloop & “) = “ & _
vararray(intloop) & “

next
else
response.write “variable: ‘” & objitem & “’ = “ _
& application.contents(objitem) & “

end if
next

  注意程序如何从application对象检索该数组。将其分配给一个局部(variant)变量,使用下面的语句:

vararray = application.contents(objitem)

  使用ubound函数可以查找出数组的大小(元素的数量),这个值可以作为遍历的终止条件:

for intloop = 0 ubound(vararray)

  这个例子是一维数组,并将只显示这样的一个数组的内容。可根据需要编辑代码以处理多维数组,例如:

for intloop = 0 to ubound(vararray)
intnumberofdimensions = ubound(vararray, 1)
for intdimension = 0 to intnumberofdimensions
response.write “ index(“ & intloop & “) = “ _
& vararray(intloop, intdimension)
next
response.write “”
next

  (2) 遍历staticobjects集合的代码

  staticobjects集合包含了所有在global.asa中使用<object>元素声明的对象引用。因为每个条目都是一个对象变量,可用简单些的代码对这个数组进行遍历。我们将输出对象的名字(在id属性中原有的定义):

for each objitem in application.staticobjects
if isobject(application.staticobjects(objitem)) then
response.write “<object> element: id=’” & objitem & “’

end if
next

  2、对集合的操作

  1) 增加值到contents集合

  增加值到contents集合的方法,与在global.asa网页的脚本代码中使用过的方法相同。允许把一个新的variant值增加到application对象中,并已有建议的名字和值(可根据需要进行编辑),单击按钮,重新载入这个网页,把值增加到application.contents集合中,并且在列表中显示。

  增加新的contents条目的代码

  所有的按钮和其他html控件放置在示例网页中的一个窗体上。action设置了当前网页的路径,提交该窗体时,重新装入。method属性为“post”,所以控件中的值出现在request.form集合中。在以前的章节中采用过这两种技术:

<form action=”<% = request.servervariables(“script_name”) %>” method=”post”>

  该窗体上的按钮都是普通的html input控件,具有相同的标题(三个空格)但名字不同。例如,创建第一个按钮(把值增加到application对象中)的代码是:

<input type=”submit” name=”cmdadd” value=” ”>

  重新载入该网页时,检查request.form集合,判定单击的是哪个submit按钮,并进行相应的处理。如果是增加一个值到application对象的按钮(该按钮在html的<input>元素中被命名为cmdadd),使用下面的程序段:

if len(request.form(“cmdadd”)) then
strvarname = request.form(“txtvarname”)
strvarvalue = request.form(“txtvarvalue”)
application.lock
application(“strvarname”) = strvarvalue
application.unlock
end if

  注意程序如何使用application.lock和application.unlock方法,确保这些值不会因两个用户并发地访问而产生混乱。如果只是对一个特定的值进行设置,一般不可能发生这种情况。但一直使用lock和unlock方法是明智的。

  2) contents集合中删除值

  通过遍历contents集合(如前面我们所做的)执行asp网页时,创建该列表。但是,我们仅收集每项的名字并把它们放到<select>列表元素内的<option>元素中:


<select name=”lstremove” size=”1”>
<%
for each objitem in application.contents
response.write “<option>” & objitem & “</option>”
next
&>
</select>

  该asp代码执行以后,在浏览器中看到的结果是:

<select name=”lstremove” size=”1”>
<option>adoconnection</option>
<option>variant_array</option>
<option>start_time</option>
<option>visit_count</option>
<option>my_new_value</option>
</select>

  (1) 删除单个值

  当单击按钮删除单个值时,该窗体再次提交给相同的网页,但是这一次将设立一个为cmdremovethis的submit按钮,然后调用application.contents集合的remove方法:

if len(request.form(“cmdremovethis”)) then
strtoremove = request.form(“lstremove”)
response.write “strtoremove = ” & strtoremove
application.lock
application.contents.remove(strtoremove)
application.unlock
end if

  注意这是contents集合的一个方法,而不是application对象的。语法是application.contents.remove,而不是application.remove。
从contents集合中删除start_time值的结果。

  (2) 删除所有的值

  如果单击三个submit类型按钮中的最后一个,该网页中的代码将检测到单击的按钮为cmdremoveall,将执行 application.contents集合的removeall方法:

if len(request.form(“cmdremoveall”)) then
application.lock
application.contents.removeall
application.unlock
end if

  再次提醒,这是contents集合的一个方法,而不是application。语法是application.contents.removeall,而不是application.removeall。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP中遍历和操作Application对象的集合-ASP教程,ASP技巧
分享到: 更多 (0)