一般情况下,您不能控制用户在 IIS 应用程序中的移动方式。与基于窗体的应用程序不同,基于窗体的应用程序从一个窗体到另一个窗体的漫游一般是固定的,而基于 Web 的应用程序提出了一个独特的挑战,因为用户可以选择“向后”按钮、也可以从“历史”列表中选择项目或选择其他的漫游手段来移动,而使用何种方式是您不能预测的。
如果您想保证用户在应用程序中沿着一组设定的路径移动,您可以使用 URLData 属性来包含 webclass处理请求和响应的顺序信息。例如,假设您有一个包含三个 webitem 的 webclass。第一个项目是一个介绍页面,第二个项目是一个客户订单窗体,第三个项目是一个给出有关当前订单信息的汇总页面。您要防止用户从第一个项目直接移动到第三个项目。
URLData 属性使您能够对每一个 webclass 请求设置一个顺序号。当设置该属性时,运行时 DLL 自动分析数据对象,并将您赋给该属性的值追加到它在响应中所找到的嵌入 URL。例如,如果有一个 URL 为:
WCI=webitem1?WCE=event1
并且使用下面的代码设置 URLData 的属性:
Me.URLData=01
运行时 DLL 将使用一个 WCU 指示器追加 URLData 属性的值到该 URL。产生的 HTML 如下面所示:
WCI=webitem1?WCE=event1&WCU=01
该参数被传送到客户,并保存在那里。在下一个请求时,包含该参数的浏览器告诉服务器,这个请求是响应01之后的下一个。
在代码中的此处,您可以将 URLData 的属性值增加1来表示第二个响应已经发出。您可以使用下面的代码来完成它:
Me.URLData=02
当 webclass 遇到这个设置值时,它再一次分析这个响应并将这个数字追加到所有的URL。数字02接着被送到浏览器并保存,然后在下一个包含 URL 的请求中被返回。
通过编写代码确定和每一个请求一起收到的 URLData 参数是否正确,您可以保证合适的顺序。例如,在每一个请求之后,既可使用一个变量,也可使用一个外部存储,例如一个数据库,来保存这个参数的值,然后比较每一个新的请求,以查看是否使用了正确的号码。下面的例子显示了为保证第二个请求的顺序使用的代码:
If URLData = 02 Then WebItem2.WriteTemplate Else '
这里的代码向浏览器发送一个错误。'
并重定向到先前的页面。EndIf