在 Dreamweaver 中添加自定义服务器行为
注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。
关于自定义服务器行为
Dreamweaver 附带有一组内置的服务器行为,从而让您可以轻松地向站点添加动态功能。您可以扩展 Dreamweaver 功能,方式是通过创建满足您的开发需求的服务器行为,或者通过从 Dreamweaver Exchange 网站中获取服务器行为。
在创建您自己的服务器行为之前,请查看 Dreamweaver Exchange Web 站点,了解是否有人已经创建了能提供您希望添加到 Web 站点的功能的服务器行为。通常,第三方开发人员已经创建了能解决您需要的服务器行为并进行了测试。
访问 Dreamweaver Exchange
- 在 Dreamweaver 中,采用以下方法之一访问 Dreamweaver Exchange:
- 选择“帮助”>“Dreamweaver Exchange”。
- 选择“窗口”>“服务器行为”,单击加号 (+) 按钮,然后选择“获取更多服务器行为”。
在浏览器中会打开 Dreamweaver Exchange网页。
- 使用您的 Adobe ID 登录该 Exchange,或者如果您尚未创建自己的 Dreamweave Exchange ID,请按照说明开设一个 Adobe 帐户。
在 Dreamweaver 中安装服务器行为或其它功能扩展
- 通过选择“命令”>“扩展管理”启动扩展管理器。
- 在扩展管理器中,选择“文件”>“安装扩展”。
有关详细信息,请参阅使用功能扩展管理器。
自定义服务器行为工作流程
如果您是一位精通 ColdFusion、JavaScript、VBScript 或 PHP 的开发人员,则可以编写自己的服务器行为。创建服务器行为的步骤包括下列任务:
- 编写一个或多个执行所需动作的代码块。
- 指定代码块在页面的 HTML 代码内的插入位置。
- 如果服务器行为要求为参数指定值,则创建一个对话框,提示使用该行为的 Web 开发人员提供一个适当的值。
- 在将该服务器行为提供给他人使用之前,对其进行测试。
使用服务器行为创建器
使用“服务器行为创建器”可以添加由服务器行为插入到页中的代码块。
- 在“服务器行为”面板(“窗口”>“服务器行为”)中,单击加号 (+) 按钮,然后选择“新建服务器行为”。
- 从“文档类型”弹出菜单中,选择要为其开发服务器行为的文档类型。
- 在“名称”框中,输入服务器行为的名称。
- (可选)若要复制现有服务器行为以添加到正在创建的行为,请选择“复制现存服务器行为”选项,然后在“要复制的行为”弹出菜单中选择服务器行为。单击“确定”。
显示“服务器行为创建器”对话框。
- 若要添加新的代码块,请单击加号 (+) 按钮,输入代码块名称并单击“确定”。
所输入的名称显示在“服务器行为创建器”中,“代码块”框中会显示相应的脚本标签。
- 在“代码块”框中,输入实现服务器行为所需的运行时代码。
注意:在“代码块”框中输入代码时,仅可为每个命名的代码块(例如,myBehavior_block1、myBehavior_block2 和 myBehavior_blockn 等)插入一个标签或代码块。如果需要输入多个标签或代码块,请为每个标签或代码块创建单独的代码块。也可以从其它页面复制和粘贴代码。
- 将插入点放在代码块中希望插入参数的位置,或者选择要使用参数替换的字符串。
- 单击“在代码块中插入参数”按钮。
- 在“参数名称”框中输入参数名称(例如,Session),然后单击“确定”。
该参数即会插入到定义参数前在代码块中放置的插入点位置处。如果选择了一个字符串,则代码块中该选定字符串的每一个实例将由参数标记取代(例如,@@Session@@)。
- 从“插入代码”弹出菜单中选择一个选项,指定在何处嵌入代码块。
- (可选)若要指定有关服务器行为的其它信息,请单击“高级”按钮。
- 若要创建更多的代码块,请重复步骤 5 至 11。
- 如果服务器行为要求向其提供参数,则必须创建一个对话框以便接受应用该行为的人所提供的参数。请参阅下面的链接。
- 执行完创建该服务器行为所需的步骤后,请单击“确定”。
“服务器行为”面板会列出该服务器行为。
- 测试服务器行为并确保其正确运行。
高级选项
为每个代码块指定源代码和插入位置之后,服务器行为就被完全定义了。在大多数情况下,不必再指定其它任何信息。
如果您是高级用户,则可以设置以下任何选项:
标识符
指定代码块是否应被视为标识符。
默认情况下,所有代码块都是标识符。如果 Dreamweaver 在文档的任何位置找到了标识符代码块,则它会在“服务器行为”面板中列出该行为。“标识符”选项用于指定代码块是否应视为标识符。
服务器行为的代码块中至少有一个必须为标识符。如果为下列情况之一,则代码块不应为标识符:同一个代码块被其它服务器行为使用;或者代码块非常简单,可能会在页面上自然发生。
服务器行为标题
指定“服务器行为”面板中行为的标题。
当页面设计者单击“服务器行为”面板上的加号 (+) 按钮时,新服务器行为的标题将出现在弹出菜单中。当设计者将服务器行为的实例应用于文档时,该行为将出现在“服务器行为”面板中的已应用行为列表中。“服务器行为标题”框用于指定加号 (+) 弹出菜单和已应用行为列表的内容。
该文本框中的初始值为在“新建服务器行为”对话框中提供的名称。定义参数后,该名称会自动更新,这些参数即会出现在服务器行为名称后面的括号中。
Set Session Variable (@@Name@@, @@Value@@)
如果用户接受默认值,括号前面的所有内容(例如,设置会话变量)都将出现在加号 (+) 弹出菜单中。带有参数的名称将出现在已应用行为列表中,例如,设置会话变量 ("abcd", "5")。
要选择的代码块
指定当用户在“服务器行为”面板中选择该行为时将选定的代码块。
在应用服务器行为时,行为中的一个代码块被指定为“选定代码块”。如果应用某个服务器行为,然后在“服务器行为”面板中选择该行为,将会在“文档”窗口选中所指定的块。默认情况下,Dreamweaver 选择未在 html 标签上方的第一个代码块。如果所有代码块都在 html 标签上方,将选择第一个代码块。高级用户可以指定哪个代码块是选定的代码块。
创建代码块
在“服务器行为创建器”中创建的代码块封装在服务器行为中,服务器行为显示在“服务器行为”面板中。代码可以是指定服务器模型的任何有效的运行时代码。例如,如果选择 ColdFusion 作为自定义服务器行为的文档类型,则编写的代码必须是能在 ColdFusion 应用程序服务器上运行的有效的 ColdFusion 代码。
可以直接在“服务器行为创建器”中创建代码块,也可以从其它来源复制并粘贴代码。在“服务器行为创建器”中创建的每个代码块都必须为单个标签或脚本块。如果必须插入多个标签代码块,请将它们拆分为单独的代码块。
代码块中的条件
利用 Dreamweaver,您可以开发包含有条件执行的控制语句的代码块。“服务器行为创建器”使用 if、elseif 和 else 语句,并可能包含服务器行为参数。这允许您根据服务器行为参数间的 OR 关系值来插入备选文本块。
下例显示 if, elseif 和 else 语句。方括号 ([ ]) 表示可选代码,星号 (*) 表示零个或更多实例。若要仅在某个或某些条件适用时才执行部分代码块或整个代码块,请使用以下语法:
<@ if (expression1) @>conditionaltext1[<@ elseif (expression2) @>conditional text2]*[<@ else @> conditional text3]<@ endif @>
条件表达式可以是任何能够使用 JavaScript eval() 函数进行计算的 JavaScript 表达式,并可能包含用 @@ 标记的服务器行为参数。(@@ 用于区分参数和 JavaScript 变量与关键字。)
有效使用条件表达式
在 insertText XML 标签中使用 if、else 和 elseif 指令时,将对参与的文本进行预处理,以解析 if 指令,并确定在结果中包含哪一文本。if 和 elseif 指令采用表达式作为参数。条件表达式与 JavaScript 条件表达式情况相同,而且也可以包含服务器行为参数。诸如此类的指令使您可以根据服务器行为参数的值或者这些参数相互之间的关系来选择备选代码块。
例如,以下 JSP 代码来自使用条件代码块的 Dreamweaver 服务器行为:
@@rsName@@.close(); <@ if (@@callableName@@ != '') @> @@callableName@@.execute(); @@rsName@@ = @@callableName@@.getResultSet();<@ else @> @@rsName@@ = Statement@@rsName@@.executeQuery(); <@ endif @> @@rsName@@_hasData = @@rsName@@.next();
条件代码块以 <@ if (@@callableName@@ != '') @>开头并以 <@ endif @> 结尾。根据代码,如果用户为服务器行为的“参数”对话框中的 @@callableName@@ 参数输入一个值,即如果 @@callableName@@ 参数值不为空或者 (@@callableName@@ != ''),那么条件代码块将由以下语句取代:
@@callableName@@.execute(); @@rsName@@ = @@callableName@@.getResultSet();
否则,条件代码块会由以下语句取代:
@@rsName@@ = Statement@@rsName@@.executeQuery();
放置代码块
在使用“服务器行为创建器”创建代码块时,必须指定这些代码块在页面的 HTML 代码中的插入位置。
例如,如果将代码块插入到开始 <html> 标签上方就必须随后指定代码块相对于相应页面 HTML 代码部分的其它标签、脚本和服务器行为的位置。典型示例包括将一个行为定位到也位于开始 <html> 标签上方的页面代码中的任何记录集查询之前或之后。
从“插入代码”弹出菜单选择定位选项时,“相对位置”弹出菜单中的可用选项会随之更改,以提供与该页面部分相关的选项。例如,如果在“插入代码”弹出菜单中选择“<html> 标签上方”,“相对位置”弹出菜单中的可用定位选项将反映该页面部分的相关选项。
下表显示了代码块插入选项以及每个插入选项可用的相对定位选项:
插入代码选项 | 相对位置选项 |
---|---|
<html> 标签上方 |
|
</html> 标签下方 |
|
相对于特定标签 | 从“标签”弹出菜单中选择一个标签,然后从标签定位选项中进行选择。 |
相对于选定内容 | 选定内容之前 选定内容之后 替换选定内容 环绕选定内容 |
若要指定自定义位置,必须为代码块指定一个高度。如果需要按照特定顺序插入多个代码块,请使用“自定义位置”选项。例如,若要在打开记录集的代码块后依次插入三个代码块,可以为第一个代码块输入高度 60,为第二个代码块输入 65,为第三个代码块输入 70。
默认情况下,Dreamweaver 向插入到 <html> 标签上方的所有记录集开始代码块分配 50 的高度。如果两个或两个以上的代码块的高度匹配,则 Dreamweaver 会随机设置这些代码块之间的顺序。
定位代码块(一般性说明)
- 使用“服务器行为创建器”编写代码块。
- 在“服务器行为创建器”对话框中,从“插入代码”弹出菜单中为代码块选择一个插入位置。
- 在“服务器行为创建器”对话框中,相对于您在“插入代码”弹出菜单中选择的位置选择一个位置。
- 如果已经完成代码块的创建,请单击“确定”。
该服务器行为即会列在“服务器行为”面板(“窗口”>“服务器行为”)中,单击加号 (+) 按钮可以查看该服务器行为。
- 测试服务器行为并确保其正确运行。
相对于页面上的另一个标签定位代码块
- 在“插入代码”弹出菜单中,选择“相对于特定标签”。
- 在“标签”框中,输入该标签或从弹出菜单中选择一个标签。
如果输入标签,请不要包括尖括号 (< >)。
- 在“相对位置”弹出菜单中选择一个选项,指定相对于该标签的某个位置。
相对于页面设计者选定的标签定位代码块
- 在“插入代码”弹出菜单中,选择“相对于选定内容”。
- 在“相对位置”弹出菜单中选择一个选项,指定相对于选定内容的某个位置。
可以将代码块插入到恰好在选定内容之前或之后。也可以用代码块替换选定内容,或者将选定内容包裹在代码块中。
若要将选定内容包裹在代码块中,则选定内容必须包含开始和结束标签,并且这两个标签之间不包含任何内容,如下所示:
<CFIF Day=”Monday”></CFIF>
将代码块的开始标签插入到选定内容的开始标签之前,而将代码块的结束标签插入到选定内容的结束标签之后。
使用循环指令重复代码块
若要使部分代码块或整个代码块重复一定的次数,请使用以下语法:
<@ loop (@@param1@@,@@param2@@) @>codeblock<@ endloop @>
创建服务器行为时,可以使用循环结构将某个代码块重复指定的次数。<@ loop (@@param1@@,@@param2@@,@@param3@@,@@param_n@@) @> code block <@ endloop @>此循环指令接受参数数组的逗号分隔列表作为参数。在这种情况下,参数数组参数使用户能够为单个参数提供多个值。重复文本将被复制 n 次,其中的 n 代表参数数组参数的长度。如果指定多个参数数组参数,则所有数组的长度必须相同。在进行第 i 次循环计算时,参数数组的第 i 个元素将替换代码块中的相关参数实例。
在为服务器行为创建对话框时,可以向该对话框添加控件,从而使页面设计者能够创建参数数组。Dreamweaver 包含一个简单的数组控件,您可以使用该控件来创建对话框。这个称作“文本域逗号分隔列表”的控件可以通过“服务器行为创建器”获得。若要创建更为复杂的用户界面元素,请参阅 API 文档,以创建包含可创建数组的控件(例如,网格控件)的对话框。
可以在条件指令中嵌套任意数量的条件或循环指令。例如,可以指定如果表达式为真,则执行循环。
下例显示如何使用这样的重复代码块来创建服务器行为(该示例为用于访问预存过程的 ColdFusion 行为):
<@ loop (@@param1@@,@@param2@@,@@param3@@,@@param_n@@) @>code block <@ endloop @>
<CFSTOREDPROC procedure="AddNewBook" datasource=#MM_connection_DSN# username=#MM_connection_USERNAME# password=#MM_connection_PASSWORD#> <CFPROCPARAM type="IN" dbvarname="@CategoryId" value="#Form.CategoryID#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@ISBN" value="#Form.ISBN#" cfsqltype="CF_SQL_VARCHAR"> </CFSTOREDPROC>
在本例中,CFSTOREDPROC 标签可以包含 0 个或更多 CFPROCPARAM 标签。但是,如果不支持 loop 指令,则没有办法在插入的 CFSTOREDPROC 标签内包括 CFPROCPARAM 标签。如果要在不使用 loop 指令的情况下,将此示例创建为服务器行为,则需要将此示例分成两部分:主 CFSTOREDPROC 标签和 CFPROCPARAM 标签,后者的成员类型为 multiple(多个)。
使用 loop 指令,可以按如下方式编写同一过程:
<CFSTOREDPROC procedure="@@procedure@@" datasource=#MM_@@conn@@_DSN# username=#MM_@@conn@@_USERNAME# password=#MM_@@conn@@_PASSWORD#> <@ loop (@@paramName@@,@@value@@,@@type@@) @> <CFPROCPARAM type="IN" dbvarname="@@paramName@@" value="@@value@@" cfsqltype="@@type@@"> <@ endloop @> </CFSTOREDPROC>
注意:忽略每个“@>”后的新行。
如果用户在“服务器行为创建器”对话框中输入下列参数值:
procedure = "proc1" conn = "connection1" paramName = ["@CategoryId", "@Year", "@ISBN"] value = ["#Form.CategoryId#", "#Form.Year#", "#Form.ISBN#"] type = ["CF_SQL_INTEGER", "CF_SQL_INTEGER", "CF_SQL_VARCHAR"]
则服务器行为将在页面中插入下列运行时代码:
<CFSTOREDPROC procedure="proc1" datasource=#MM_connection1_DSN# username=#MM_connection1_USERNAME# password=#MM_connection1_PASSWORD#> <CFPROCPARAM type="IN" dbvarname="@CategoryId" value="#Form.CategoryId#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@Year" value="#Form.Year#" cfsqltype="CF_SQL_INTEGER"> <CFPROCPARAM type="IN" dbvarname="@ISBN" value="#Form.ISBN#" cfsqltype="CF_SQL_VARCHAR"> </CFSTOREDPROC>
注意:除非是作为条件指令表达式的一部分,否则,参数数组不能在循环外使用。
使用 loop 指令的 _length 和 _index 变量
loop 指令包括两个内置变量,可用于嵌入的 if 条件。这两个变量为:_length 和 _index。_length 变量计算 loop 指令处理的数组长度,而 _index 变量计算 loop 指令的当前索引。为了确保这两个变量仅被识别为指令,而不是作为传递到循环中的实际参数,请不要将这两个变量中的任何一个包含在 @@ 对中。
使用内置变量的一个示例是将它们应用于 Page 指令的 import 属性。import 属性要求使用由逗号分隔的包。如果 loop 指令围绕整个 import 属性展开执行,您可能希望只在第一次循环迭代中输出属性名称 import=(这将包含右双引号 (")),而在最后一次循环迭代中不输出逗号。使用内置变量可将这一需要表示如下:
<@loop (@@Import@@)@> <@ if(_index == 0)@>import=" <@endif@>@@Import@@<@if (_index == _length-1)@>"<@else@>, <@ endif @> <@endloop@>
请求服务器行为的参数
服务器行为经常要求页面设计者提供参数值。该值必须在将服务器行为代码插入到页面之前插入。
通过在代码中定义由设计者提供值的参数,可以创建该对话框。然后,为服务器行为生成对话框,以提示页面设计者输入参数值。
注意:如果指定代码应当相对于页面设计者选择的特定标签进行插入(即,在“插入代码”弹出菜单中选择了“相对于特定标签”),系统将向代码块添加一个参数,而不需要您的干预。该参数向行为的对话框添加一个标签菜单,供页面设计者选择标签。
定义服务器行为代码中的参数
- 在代码中希望插入所提供参数值的位置输入参数标记。该参数具有如下语法:
@@parameterName@@
- 将 formParam 字符串包含在参数标记 (@@) 中:
<% Session(“lang_pref”) = Request.Form(“@@formParam@@”); %>
例如,如果服务器行为包含以下代码块:
<% Session(“lang_pref”) = Request.Form(“Form_Object_Name”); %>
若要让页面设计者提供 Form_Object_Name 的值,请将该字符串包含在参数标记 (@@) 中:<% Session(“lang_pref”) = Request.Form(“@@Form_Object_Name@@”); %>
<% Session(“lang_pref”) = Request.Form(“@@Form_Object_Name@@”); %>
也可以高亮显示该字符串,然后单击“在代码块中插入参数”按钮。输入一个参数名称,然后单击“确定”。Dreamweaver 会将高亮显示的字符串的每个实例替换为以参数标记括起来的指定参数名称。
Dreamweaver 使用以参数标记括起来的字符串标注其生成的对话框中的控件(请参阅以下步骤)。在上个示例中,Dreamweaver 使用以下标签创建了一个对话框:
注意:服务器行为代码中的参数名称不能有任何空格。因此,对话框标签不能有任何空格。如果要在标签中包含空格,可以编辑生成后的 HTML 文件。
输入参数名称为服务器行为创建一个对话框,以请求参数值
- 在“服务器行为创建器”中,单击“下一步”。
- 若要更改对话框控件的显示顺序,请选定某个参数,然后单击向上或向下箭头。
- 若要更改参数的控件,请选定该参数,然后在“显示为”列中选择另一个控件。
- 单击“确定”。
Dreamweaver 会为您定义的每个设计人员提供的参数生成一个带有标签控件的对话框。
查看对话框
- 单击“服务器行为”面板(“窗口”>“服务器行为”)中的加号 (+) 按钮,然后从弹出菜单中选择您的自定义服务器行为。
编辑为服务器行为创建的对话框
- 在“服务器行为”面板(“窗口”>“服务器行为”)中,单击加号 (+) 按钮,然后从弹出菜单中选择“编辑服务器行为”。
- 从列表中选择该服务器行为,并单击“打开”。
- 单击“下一步”。
将出现一个对话框,该对话框列出在代码中定义的所有由设计者提供值的参数。
- 若要更改对话框控件的显示顺序,请选定某个参数,然后单击向上或向下箭头。
- 若要更改参数的控件,请选定该参数,然后在“显示为”列中选择另一个控件。
- 单击“确定”。
编辑和修改服务器行为
您可以编辑用“服务器行为创建器”创建的任何服务器行为,其中包括从 Dreamweaver Exchange 网站下载的服务器行为以及由其它第三方开发商提供的服务器行为。
如果将服务器行为应用于页面,然后在 Dreamweaver 中编辑行为,则旧行为的实例将不再显示在“服务器行为”面板中。“服务器行为”面板将搜寻页面,查找与已知服务器行为代码相匹配的代码。如果服务器行为代码发生了更改,则面板不会识别页面上该行为的以前版本。
在面板中保留行为的原有版本和新版本
- 单击“服务器行为”面板(“窗口”>“服务器行为”)中的加号 (+) 按钮,选择“新建服务器行为”,创建原有服务器行为的副本。
编辑用服务器行为创建器创建的服务器行为的代码
- 在“服务器行为”面板(“窗口”>“服务器行为”)中,单击加号 (+) 按钮,然后从弹出菜单中选择“编辑服务器行为”。
“编辑服务器行为”对话框将显示当前服务器技术的所有行为。
- 选择该服务器行为并单击“编辑”。
- 选择适当的代码块并修改代码、参数标记或要在页面中插入的代码块的位置。
- 如果已修改的代码不包含任何由设计者提供值的参数,请单击“确定”。
Dreamweaver 会重新生成服务器行为(不含对话框)。新的服务器行为出现在“服务器行为”面板的加号 (+) 弹出菜单中。
- 如果已修改的代码确实包含由设计者提供值的参数,请单击“下一步”。
Dreamweaver 将询问您是否要创建一个新对话框来覆盖原有的对话框。进行更改并单击“确定”。
Dreamweaver 将所有更改保存在服务器行为的 EDML 文件中。
编码指导原则
一般说来,服务器行为代码应当紧凑、可靠。Web 应用程序开发人员对添加到他们页面中的代码非常敏感。请遵照广泛接受的文档类型语言(ColdFusion、JavaScript、VBScript 或 PHP)的编码惯例。在编写注释时,请考虑可能需要理解代码的不同技术用户,如 Web 和交互程序的设计者或者其它 Web 应用程序开发人员。请包含正确描述代码目的的注释以及有关将代码包含在页面内的任何特定说明。
创建服务器行为时要切记以下代码指导原则:
错误检查
一项重要的要求。服务器行为代码应当妥善处理错误情况。尝试预见所有的可能性。例如,如果参数请求失败怎么办? 如果查询没有返回记录怎么办?
唯一名称
帮助确保能够清楚标识代码并且避免与现有代码出现名称冲突。例如,如果页面包含一个名为 hideLayer() 的函数和名为 ERROR_STRING 的全局变量,而服务器行为插入的代码也使用了这两个名称,则该服务器行为可能与现有代码冲突。
代码前缀
允许您在页面中标识您自己的运行时函数和全局变量。约定之一就是使用首字母大写。请不要使用 MM_ 前缀,因为它是仅为 Dreamweaver 使用而保留的。Dreamweaver 会在所有函数和全局变量之前添加前缀 MM_,以避免与您编写的任何代码冲突。
var MM_ERROR_STRING = "..."; function MM_hideLayer() {
避免相似的代码块
以便您编写的代码不会与其它代码块中的代码过于相似。如果某代码块看起来与页面上的另一个代码块非常类似,“服务器行为”面板可能会错误地将前者标识为后者的一个实例(或反之)。一个简单的解决方法是给代码块添加注释,使它更具有唯一性。
测试服务器行为
Dreamweaver Exchange 建议对您创建的每个服务器行为执行以下测试:
- 从“服务器行为”面板应用行为。如果该行为有对话框,请在每个域中输入有效数据,然后单击“确定”。验证在应用该行为时没有错误发生。验证该服务器行为的运行时代码是否出现在“代码”检查器中。
- 再次应用该服务器行为,并在每个对话框域中输入无效数据。尝试下列操作:将域保留为空白,使用大数或负数,使用无效字符(例如 /、?、:、* 等等),以及在数字域中使用字母。可以编写格式验证例程来处理无效数据(验证例程涉及到手工编码,这超出了本书的范围)。
在将服务器行为成功地应用于页面后,请验证下列内容:
- 检查“服务器行为”面板,确保该服务器行为名称出现在添加到页面的行为的列表中。
- 验证服务器端脚本图标是否出现在页面上(如果适用)。一般服务器端脚本图标是金色的盾牌。若要查看该图标,请启用“不可见元素”(“查看”>“可视化助理”>“不可见元素”)。
- 在“代码”视图(“查看”>“代码”)中,验证没有生成任何无效代码。
另外,如果服务器行为将代码插入到与数据库建立连接的文档,请创建一个测试数据库来测试插入到文档中的代码。通过定义查询来验证连接,这些查询应生成不同的数据集以及不同大小的数据集。
最后,将页面上传到服务器并在浏览器中打开。查看页面的 HTML 源代码并验证服务器端脚本未生成任何无效的 HTML。