当前位置:首页 » 网站技术 » ASP

使用集合 [ 一 ]

...

  大多数 ASP内建对象支持集合。集合是存储字符串、数字、对象和其他值的地方。除了在存储或取出项目时集合会自动扩展与搜索外,集合与数组非常相近。与数组不同的是,集合被修改后,项目的位置将会移动。可以通过集合中项目的名称、索引或者通过在集合的所有项目中遍历访问项目。

通过名称和索引访问项目
  通过使用项目名称可以访问集合中的具体项目。例如,Contents集合拥有在 Session对象中保存的所有变量。同样也拥有由 Server.CreateObject创建的所有对象。假设在 Session对象中存储了下列用户信息:

  <%

  Session.Contents("FirstName") = "Sam"

  Session.Contents("LastName") = "Woo"

  Session.Contents("Age") = 29

  %>

  可以使用在集合中存储项目时关联的名称访问项目。例如,下面的表达式返回字符串“Sam”:

  <%= Session.Contents("FirstName") %>

  通过使用与项目关联的索引或号码也可以访问项目。例如,下面的表达式检索存储在 Session对象的第二个存储槽中的信息并且返回“Woo”:

  <%= Session.Contents(2) %>

  ASP集合从 1开始编号。当在集合中增加或删除项目时,与项目关联的索引将会改变。所以不能认为项目的索引始终不变。正如将在下面的主题中说明的那样,利用索引的访问一般用来遍历集合,或访问只读集合中的项目。

  通过使用速记的名称可以访问项目。ASP以特定的顺序搜索与对象关联的集合。如果在对象的集合中特定名称的项目只出现一次的话,可以消除该集合的名称:

  <%= Session("FirstName") %>

  访问存储在 Application或 Session对象中的项目时,消除集合名称一般是安全的。但是,对于 Request对象,最好指定集合名称,因为该集合很可能包含重复的名称。

遍历集合
  在集合的所有项目中遍历可以了解集合中存储的项目或修改项目。遍历集合时,必须提供集合名称。例如,可以使用 VBScript中的 For...Each语句访问存储在 Session对象中的项目:

  <%

  'Declare a counter variable.

  Dim Item

  'For each item in the collection, display its value.

  For Each Item in Session.Contents

  Response.Write Session.Contents(Item) & "<BR>"

  Next

  %>

  可以使用 VBScript中的 For...Next语句遍历集合。例如,要列出上例中存储在 Session中的三个项目,可以使用下列语句。

  <%

  'Declare a counter variable.

  Dim Item

  'Repeat the loop until the value of counter is equal to 3.

  For Item = 1 to 3

  Response.Write Session.Contents(Item) & "<BR>"

  Next

  %>

  因为一般不知道存储在集合中的项目个数,ASP支持集合的 Count属性,这个属性返回集合中的项目数。可以使用 Count属性指定计数器的终值。

  <%

  'Declare a counter variable.

  Dim Item

  'Repeat this loop until the counter equals the number of items

  'in the collection.

  For Item = 1 to Session.Contents.Count

  Response.Write Session.Contents(Item) & "<BR>"

  Next

  %>

  可以在脚本中使用 for语句在集合中循环。在 JScript的 for语句中使用 Count属性时,为了收到更大的效果,应该将 Count值分配给本地变量并使用该变量设置计数器终值。这样,脚本引擎就不需要每次循环都查寻 Count的值。下面的例子展示了这个技巧:

  <%

  var item, numitems;

  numitems = Session.Contents.Count;

  for (item = 1; item <= numitems; item++) {

  Response.Write(Session.Contents(item) + "<BR>")

  }

  %>

  Microsoft JScript 3.0引入了 Enumerator对象。可以使用该对象遍历 ASP集合。atEnd方法指出了集合中是否还存在项目。moveNext方法移动到集合中的下一个项目。

  <%

  // Create an Enumerator object

  var mycoll = new Enumerator(Session.Contents);

  //Iterate through the collection and display each item

  while (!mycoll.atEnd()) {

  var x = mycoll.item();

  Response.Write(Session.Contents(x) + "<BR>");

  mycoll.moveNext();

  }

  %>

  遍历带子关键字 (Subkeys)的集合

  脚本在单一 cookie中嵌入相关值以减少在浏览器和 Web服务器之间传送的 cookie数目。因此 Request和 Response对象的 Cookies集合能够在单一项目中拥有多个值。这些子项目或子关键字可以被单个访问。只有 Request.Cookies和 Response.Cookies集合支持子关键字 (Subkeys)。Request.Cookies只支持读操作;Response.Cookies只支持写操作。

  可以列举 Request.Cookie集合中所有的 cookie以及 Cookie中所有的子关键字 (Subkeys)。但是,如果在没有子关键字 (Subkeys)的 Cookie上遍历子关键字,将不会产生任何结果。通过使用 .HasKeys语法首先检查 cookie是否含有子关键字 (Subkeys),就可以避免这种情况。下面的这个例子展示了这个技巧。

  <%

  'Declare counter variables

  Dim Cookie, Subkey

  'Display the entire cookie collection.

  For Each Cookie in Request.Cookies

  Response.Write Cookie & "<BR>"

  If Request.Cookies(Cookie).HasKeys Then

  'Display the subkeys

  For Each Subkey in Request.Cookies(Cookie)

  Response.Write Subkey & "=" & Request.Cookies(Cookie)(Subkey) & "<BR>"

  Next

  Else

  Response.Write "No subkeys in this cookie <BR>"

  End If

  Next

  %>

继续阅读
使用集合 [ 二 ]
Active Server Page 内建对象
向浏览器发送内容
向浏览器发送内容[2]
包含文件
访问数据库 [1]
访问数据库 [2]
访问数据库 [3]
调试 ASP 脚本 [1]
发表评论

昵称:
最新评论
暂时没有评论!