在运行时定义 Webclass 事件

除了可以在设计时处理存在于 webclass 中的事件外,也可以在运行时创建事件,并动态地处理它们。在通过对浏览器的响应编写 HTML 来动态地产生部分或全部的用户界面的情况下,这种运行时产生事件的能力是非常有用的。

使用 URLFor 方法在运行时产生用户事件,该方法需要两个参数:webclass 中一个 webitem 的名字和一个事件的名字。要创建一个用户事件,需要将一个运行时没有定义的事件名字传递给这个函数。

这些运行时事件的处理是由 UserEvent 事件进行的。在这个事件的过程中,编写代码告诉 webclass 如何处理它的所有动态产生的事件。如果有多个这样的事件,您必须使用条件语句如 If 或 Select Case 告诉 webclass 对每一个事件如何响应。

示例:搜索页面中的动态事件

假设您有一个包含两个页面的应用程序:

下图显示了两种可能的搜索结果。

具有动态产生事件的表格

假设对搜索返回的每一个行,要产生一个超链接,用户可以选择它来接收更多的信息。这些超链接可以作为 webclass 的事件,但您不能在设计时处理这些事件,因为它们是在执行搜索时动态产生的。因此,必须在运行时产生这些事件。

下面显示了一些 Visual Basic 代码,您可以使用这些代码来产生表格并对它创建用户事件。

With Response

   '开始一个表格
   .Write "<TABLE BORDER CELLSPACING=1 CELLPADDING=7>"

   '对结果集中的每一个记录,产生一个行。
   Do While rs.EOF = False
      '开始一个行和单元格
      .Write "<TR><TD>"

      ' Response webitem,插入一个超链接,调用 lastname 字段,
      该字段表示到数据库记录的关键字
      .Write  "<A HREF=""" & URLFor(Response, rs("lastname") & """>"

      '使该超链接的文本是人员的姓名。
      .Write rs("lastname") & ", " & rs("firstname")
      .Write </A>"
      .Write "</TD></TR>

      '移动到下一个记录并循环
      rs.MoveNext
   Loop

   '结束该表格
   .Write "</TABLE>"

End With

要处理这个响应页面的事件,应该对 Response 的 webitem 的 UserEvent 事件定义代码。

编写用户事件代码

在一个 UserEvent 过程中处理 webitem 的所有用户事件。如果有一个页面中包含几个用户事件,并且需要在过程中将它们区别对待,您应该使用一个条件语句,例如If 或 Select Case 对页面上的每一个动态事件的名字指定不同的响应。

注意 在前面产生的表格实例中,您不能使用 If 或 Select Case 语句,因为您要对每一行执行相同的操作,即从表格中获取数据库的关键字,然后查找记录和显示更多的信息。

当 webclass 从浏览器中收到一个引用用户事件的请求时,它激发 UserEvent 事件。下列代码显示了您有可能为上面部分中事件所定义的过程:

Private Sub Response_UserEvent(ByVal EventName As String)
   
'为一个新的记录集设置一个在前面定义过的变量
rs = New Ado.recordset

'获取关键字
rs.GetPerson EventName

'这里的代码在一个页面中显示了检索到记录的所有
'信息
End Sub

在这段代码中,开发者创建了一个新的记录集并获取指定关键字的值。您应当用合适的关键字值来替换这个字“关键字”。