在一个 Webclass 中执行文本替换

在您临时产生 HTML 页面的某些部分的情况下,文本替换是非常有用的。例如,当进入到您应用程序以前的一个页面时,您可能想使一个 Web 页面带有用户的名字。您可以在此.htm 文件中插入一个替换指示符,然后在运行时用用户的名字替换它。

在一个更加复杂的例子中,假设您想将一个数据库查询的结果填充到一个表中。您可以在 HTML 的表中使用替换指示符来标记将信息放到何处,接着在运行查询后用获取的信息替换这些指示符。

执行文本替换的过程包括:在一个 webclass 模板文件中扫描特殊的指示符标记,以及用自定义的内容替换指示符标记或它们的内容。当 webclass 在一个事件过程中响应 WriteTemplate 方法时,它自动地处理这些指示符。在完成所有的替换后,WriteTemplate 发送一个 HTML 模板文件的内容到浏览器,

在服务器上处理的标记具有下面的格式:

这些元素合起来向 webclass 提供了处理标记时需要的信息。您可以在文件中希望系统执行替换的每一个位置插入这些指示符。

详细信息 关于 WriteTemplate 方法和它的处理过程的详细信息,请参阅“发送 HTML 到浏览器”,和《语言参考》中的“ProcessTag 事件”。

修改一个模板文件来使用替换

为了执行文本替换,首先在 Webclass 设计器中对模板定义一个标记前缀,然后使用编辑器将这些标记前缀插入到文件发生替换的位置。您可以在一个文件中按您的需要指示多个替换区域。

例如,假设在您的 webclass 中有一个叫做 FeedbackPage 的模板,在这个页面中,您想在两个区域执行一个替换:您要在将发出的用户订单页面上插入用户的名字和日期。您已经定义了这个 webitem 的标记前缀是 WC@。

注意 标记前缀必须以一个字母字符开头,并且应当包含一个提供优化处理的特殊字符。

假设在添加替换标记前,您的 FeedbackPage 文件象如下样式:

<HTML>
<BODY>
<P>Thank you for your order. We estimate that your order will be shipped on the following date: xxx.
<P>
</BODY>
</HTML>

为了指示名字和日期的替换区域,您应当按如下所示修改文件:

<HTML>
<BODY>
<P>Thank you for your order, <WC@customer>firstlast</WC@customer>. We estimate that your order will be shipped on the following date: <WC@shipdate>shipdate</WC@shipdate>.
<P>
</BODY>
</HTML>

下图标识了前面的代码中的替换区域部分:

替换指示符

编写代码处理一个替换区域

在 ProcessTag 事件中编写所有的代码去替换您文件中的文本。如果您有一个包含几个替换区域的模板文件,并且在您的过程中需要对它们区别对待,则应当使用一个条件语句,例如 If 或Select Case 对页面中的每一个标记前缀指定不同的操作。

对含有标记前缀文件的处理次序是:

  1. Visual Basic 处理用户的代码,并从应用程序的一个事件处理程序中调用 WriteTemplate 方法。一般情况下,事件处理程序是为 Respond 事件编写的。

  2. Webclass 根据您为 ProcessTag 事件编写的代码处理并替换文件中所有前缀标记。

  3. Webclass 将模板文件写到 Response 对象。

  4. WriteTemplate 方法发送模板文件到浏览器。

注意 ProcessTag 事件不能被浏览器中用户的操作自动激发。它由另一个事件过程中的 WriteTemplate 方法调用。

例如,在前面部分的例子中,您修改一个.htm 文件以包括两个替换区域:一个叫做“customer”、另一个叫做“shipdate”。下面的事件过程可以用来处理这些替换:

Sub FeedbackPage_ProcessTag(ByVal TagName as String, TagContents as _
String, SendTags as Boolean)
   '使用以前定义的变量 FirstNameLastName'ShipDate
   If TagName = "wc@customer" Then
      TagContents = FirstName & "" & LastName
   EndIf
   If TagName = "wc@shipdate" Then
      TagContents = ShipDate
   EndIf
   SendTags = False
End Sub

在这段代码中,webclass 从几个成员变量中检索信息,这些变量在以前被设置为用户输入的值。这些值对应于用户的名、姓、一个计划的运送日期。从这三个变量来的值被插入到页面中,然后显示给用户。

当 ProcessTag 事件被激发时,TagContents 参数检索.htm 文件中标记之间文本的当前值。例如,在 HTML 代码的下面行中,“customer”是 TagContents 参数的当前值。

<P>Thank you for your order, <WC@customer>customer</WC@customer>. 

在 ProcessTag 事件过程中对 TagContents 设置新值。您可以利用已存在的内容来帮助获取这些新值。例如可以使用一个数据库的关键字作为 TagContents,然后在 ProcessTag 事件过程中引用那个值从该数据库中获取一个记录。

要对应用程序中的一个 webitem 执行文本替换,请按照以下步骤执行:

  1. Webclass 设计器中,单击要定义文本替换的模板,然后在“属性”窗口中对要使用的前缀设置 TagPrefix 属性的值。

    注意 标记前缀必须以一个字母字符开头。

  2. 在您选择的编辑器中打开模板的.htm 文件,然后使用下面的格式,在要替换文本的地方插入替换指示符:

    <tagprefix tagname>tagcontents</tagprefix tagname>

    参数 定义
    Tagprefix 在“属性”窗口中对这个模板定义的标记前缀。
    Tagname 一个唯一的标识符,在代码中通过它将引用这个替换区域。例如,对用于插入顾客订单号码的一个标记前缀,您可以使用“orderno”这个标记名。
    Tagcontents 要插入内容的占位符。这个参数也可以被用于提供有关内容的信息,或被用于保留处理替换时需要的信息,例如一个数据库关键字。

  3. Webclass 设计器中,右键单击模板并单击“查看代码”。

  4. 对 webitem 的 ProcessTag 事件编写代码,使用 If 或 Select Case语句对文件中的每一个替换区域进行处理。

重新扫描替换区域

在通常的替换处理中,当 webclass 处理 WriteTemplate 事件时,它自动地扫描一次.htm 文件,查找文件中所有的标记前缀。找到这些替换区域后,webclass 处理这些标记并按照代码中的指示替换它们。然而,当替换这些原始标记中的某个标记时,代码可能指示 webclass 应该插入另外的标记前缀。在这种情况下,webclass 必须对这些新的替换指示符再一次搜索替换区域并处理它们。

您可以通过设置该 webitem 的 ReScanReplacements 属性告诉 webclass 再搜索一次。该 ReScanReplacements 属性会引起 webclass 在 ProcessTag 事件期间发生另一次外扫描替换标记。对您产生的任何附加的替换区域,要使 ProcessTag 事件也能处理到,则必须为其编写代码。

注意 ReScanReplacements 属性只有在 ProcessTag 事件期间才告诉 webclas s再做一遍搜索。在其他的事件期间,不能使用这个属性扫描替换区域。

要使 webclass 能递归地检查文件新的标记前缀,请