<style type="text/css">
我曾在《用ASP写一个支持自定义模板的数据记录输出函数》中写过一个支持自定义HTML模板显示数据库记录集(Recordset)的方法(函数),现在类推一下,写一个支持自定义HTML模板显示字典对象中的内容的方法(函数)。
这个方法(函数)接受4个参数,分别是:
- 一个字典对象
- 模板标签的头部
- 模板标签的重复项目部分
- 模板标签的底部
它返回用参数指定的头部、重复项目部分与底部拼接好完整HTML代码。
' 获取将字典对象中的内容以指定的模板显示出来的HTML代码 Public Function GetDicListWithTemplate(ByRef oDictionary, ByRef sHeader, ByRef sRepeater, ByRef sFooter) Dim i, regEx, matches, repeater, j, aKeys, aItems'On Error Resume Next GetDicListWithTemplate = "" GetDicListWithTemplate = GetDicListWithTemplate & sHeader Set regEx = Server.CreateObject("VBScript.RegExp") Set matches = Nothing regEx.Global = True regEx.IgnoreCase = True '数据行 If Count > 0 Then aKeys = oDictionary.Keys aItems = oDictionary.Items For i = 1 To Count repeater = sRepeater ' 先替换掉<#= Keys #>标签 regEx.Pattern = "<#=\s*(Keys)\s*#>" Set matches = regEx.Execute(sRepeater) For j = 0 To matches.Count - 1 If matches(j).SubMatches.Count > 0 Then repeater = Replace(repeater, matches(j), aKeys(i-1)) Else repeater = Replace(repeater, matches(j), "***") End If Next regEx.Pattern = "<#=\s*(Items)\s*#>" Set matches = regEx.Execute(sRepeater) For j = 0 To matches.Count - 1 If matches(j).SubMatches.Count > 0 Then repeater = Replace(repeater, matches(j), aItems(i-1)) Else repeater = Replace(repeater, matches(j), "***") End If Next GetDicListWithTemplate = GetDicListWithTemplate & repeater Next End If If Not matches Is Nothing Then Set matches = Nothing End If Set regEx = Nothing GetDicListWithTemplate = GetDicListWithTemplate & sFooter On Error Goto 0 End Function
使用示例:
如果我们将访问网站的在线的活跃用户信息保存在了一个字典对象里,用SessionID作为字典对象的键,而用另外的字符串比如用户名作为字典对象的值。那么,我们现在用一个列表将它显示出来,就可以如下这样写:
Dim sHeader, sRepeater, sFootersHeader = "<div><table class=""tbLikeGoogle""><thead><tr><th>用户键值</th><th>用户标识</th></tr></thead><tbody>" sRepeater = "<tr><td><#= Keys #></td><td><#= Items #></td></tr>" sFooter = "</tbody></table></div>" Response.Write GetDicListWithTemplate(UserDictionary, sHeader, sRepeater, sFooter)
显示效果如下:
用户键值 | 用户标识 |
---|---|
38928318 | 2052 |
asdlkfj | askdfjsdafj |
真是太方便啦!