接收和处理参数

Voyager 中可以通过各种方式传递参数。

URL 地址中传递参数

通过地址传参是最常用的传递数据的方式,在 Voyager 中处理参数非常简单。

例如地址/carton/page?id=1&name=Tom&age=18

一种方法是通过PQL参数占位符 #{name},可以在页面的任何地方使用,包括服务器端代码,比如:

另一种方法是通过 PQL 变量,Voyager 会把所有的地址参数转成变量,例如上面地址会生成3个变量:

注意所有参数变量的数据类型都为文本字符串。

母版页中的传递参数

母版页地址中可以传递参数目的是为了定制出不同的母版页,字符冲突时需要将特殊字符进行编码,见本文后面的说明

服务器端包含中传递参数

同样,服务器端包含文件也可以带参数,目的也是为了定制引入页或页面上的内容。

参数值中与地址参数常用符号冲突时需要进行编码,见本文后面的说明。#{id}是页面地址中的参数。

以 Json 格式传递参数

有时我们传递的参数会很多,这时如果通过母版页或服务器端包含这两种方式以 Query String 的格式传递参数的话,地址会写的非常长,不容易阅读。这种情况下可以以 Json 对象方式传递参数。

以上配置可以写在页面的任意位置,建议写在母版页或服务器端包含之后,如果没有母版页或服务器端包含,可以写在页面顶部。这种方式配置参数的好处一是直观,可读性强;二是特殊字符不需要编码;三是传递的参数可区分数据类型。

注意开始的@符号不能省略,类似 Asp.net 的 Razor 语法规则,并且结尾的}后面要回行。这里支持参数占位符,如上例中的#{id}。极端情况下,有可能会因为参数值中有不配对的大括号{}出现解析错误,这时可以考虑把值中的大括号替换成 URL 编码:{对应%7B}对应%7D

特别注意

在上述三种方式的传参方式中,不论是以查询字符串的形式传参还是以 Json 方式传参,参数值里面都不能包含服务器端标记,如<%=$id%>。因为母版页、服务器端包含和 Json 传参其本身就是在服务器端解析和运行的代码。

参数中的特殊字符

母版页和服务器端中与地址参数冲突的字符需要进行 URL 编码,对应表如下:

参数处理逻辑

在 Voyager,可以通过以上三种形式接收地址中的参数。这些参数可以在页面、母版页、服务器端包含文件 任何地方 以本文开头提到的两种方式使用,即每个参数的作用域是全局的,而不是针对于母版页或某一个服务器端包含文件,所以这些参数不建议使用相同的名字。如果使用了相同的名字,比如页面地址有name参数,母版页中也有name参数,服务器端包含文件中也有name参数,那么最后name的值是服务端包含文件参数中设定的值,即服务器端包含文件优先级最高,其次是母版页,最后是页面地址参数。

特别说明一点,页面地址中的参数可以传递给母版页和服务器端包含文件,例如有地址/list?id=2,页面中有:

上例中,#{id}部分会被替换为2

另外,PQL 参数处理逻辑在 Voyager 中同样适用,如参数变量等。


参考链接


微信公众号
码农老吴  |  星源工作室  |  开发月志  |  问题反馈
联系我们:wu@qross.io     手机/微信:18618171102
京 ICP 备 20027445 号
$(h1)!