除了可以在设计时处理存在于 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
在这段代码中,开发者创建了一个新的记录集并获取指定关键字的值。您应当用合适的关键字值来替换这个字“关键字”。