<style type="text/css">

我曾在《用ASP写一个支持自定义模板的数据记录输出函数》中写过一个支持自定义HTML模板显示数据库记录集(Recordset)的方法(函数),现在类推一下,写一个支持自定义HTML模板显示字典对象中的内容的方法(函数)。

这个方法(函数)接受4个参数,分别是:

  1. 一个字典对象
  2. 模板标签的头部
  3. 模板标签的重复项目部分
  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 &amp; sHeader
        Set regEx = Server.CreateObject("VBScript.RegExp")
        Set matches = Nothing
        regEx.Global = True
        regEx.IgnoreCase = True
        
        '数据行
        If Count &gt; 0 Then
            aKeys = oDictionary.Keys
            aItems = oDictionary.Items
            For i = 1 To Count
                repeater = sRepeater
                
                ' 先替换掉&lt;#= Keys #&gt;标签
                regEx.Pattern = "&lt;#=\s*(Keys)\s*#&gt;"
                Set matches = regEx.Execute(sRepeater)
                
                For j = 0 To matches.Count - 1
                    If matches(j).SubMatches.Count &gt; 0 Then
                        repeater = Replace(repeater, matches(j), aKeys(i-1))
                    Else
                        repeater = Replace(repeater, matches(j), "***")
                    End If
                Next
                
                regEx.Pattern = "&lt;#=\s*(Items)\s*#&gt;"
                Set matches = regEx.Execute(sRepeater)
                
                For j = 0 To matches.Count - 1
                    If matches(j).SubMatches.Count &gt; 0 Then
                        repeater = Replace(repeater, matches(j), aItems(i-1))
                    Else
                        repeater = Replace(repeater, matches(j), "***")
                    End If
                Next
                
                GetDicListWithTemplate = GetDicListWithTemplate &amp; repeater
            Next
        End If
        
        If Not matches Is Nothing Then
            Set matches = Nothing
        End If
        Set regEx = Nothing
        GetDicListWithTemplate = GetDicListWithTemplate &amp; sFooter
        
        On Error Goto 0

    End Function

使用示例:

如果我们将访问网站的在线的活跃用户信息保存在了一个字典对象里,用SessionID作为字典对象的键,而用另外的字符串比如用户名作为字典对象的值。那么,我们现在用一个列表将它显示出来,就可以如下这样写:

                            Dim sHeader, sRepeater, sFooter
                        sHeader = "&lt;div&gt;&lt;table class=""tbLikeGoogle""&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;用户键值&lt;/th&gt;&lt;th&gt;用户标识&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;"
                        sRepeater = "&lt;tr&gt;&lt;td&gt;&lt;#= Keys #&gt;&lt;/td&gt;&lt;td&gt;&lt;#= Items #&gt;&lt;/td&gt;&lt;/tr&gt;"
                        sFooter = "&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;"
                        
                        Response.Write GetDicListWithTemplate(UserDictionary, sHeader, sRepeater, sFooter)

显示效果如下:

用户键值用户标识
389283182052
asdlkfjaskdfjsdafj

真是太方便啦!