LiveHelp:方便地在Asp.net界面上添加帮助文档

背景


作为开发人员,我觉得应用程序有个 /Help/ 文件夹专门放帮助就行了;但是客户却要求在操作界面也放给出相应的帮助,原因是他不愿意多点击几下鼠标.好吧,You're the boss,容我想个能偷懒的方案来吧.

实现

首先我不打算在不同的地方重复文档的具体内容(一是我懒,二是如果有变化了要改的地方很多,而且有忽略了某处造成信息不同步的可能),那么最好的办法就是文档内容还是在原来的 /Help/ 文件夹里,你愿意到这来看还能看到;操作界面调用这里的内容(估且称在某处出现的帮助文字叫帮助块(HelpPiece)吧)。这样的话就必须给这些文档定义一个统一的格式,因为只有这样才能方便地解析出里面的帮助块,以便调用。

根据原有文档的格式,我稍作修改,做出了以下约定:帮助块是紧随在命名的<h2>或<h3>或<h4>后面<div>。前面的<hx id="xxx">的id是此帮助块的id, 其内容是帮助块的title, <div>里的内容是此帮助块的具体内容。<hx>的id应该是唯一的,而且是在所有帮助文档的范围内唯一。

有了这些信息,就可以打造我们的HelpPiece和HelpParser了:
HelpPiece.cs

HelpParser.cs

除了上面提到的东西以外,我还在HelpParser里添加了解析一个文件,一个文件夹,一个文件夹和它所有子文件夹的三种解析方式,并记录了解析的文件的Url。

测试完这两个类能完成它们应该完成的工作之后,下面就轮到LiveHelper这个控件了。我们第一次Render这个控件时,要解析所有指定的帮助文档,并把结果放到Cache中;以后就直接从Cache中取。Control的UI我选择了使用ibox,一个类似于lightbox(用于在当前页面弹出图片)但还能处理Html的javascript程序。
LiveHelper.cs

用法

OK,现在我们能这样使用这个控件了:
<%@ Register Assembly="LiveHelp" Namespace="LiveHelp" TagPrefix="live" %>

        
<live:LiveHelper FileFilter="*.htm" HelpHtmlPath="~/Help" HelpId="testHelp"
            ParseMode
="DirectoryAndDescendants" Text="Help" runat="server">
        </
live:LiveHelper>
        <!--或者使用默认参数值-->
        
<live:LiveHelper HelpId="testHelp" runat="server"></live:LiveHelper>

Html帮助文件的格式:
...
<h2 id="testHelp">帮助一</h2>
<div>
<p>some contents here.</p>
</div> 
...

示例





代码下载

全部代码(包括测试,演示)下载: LiveHelp.zip.(为什么不让上传 7z 格式的文件? 我用 7z 格式压了只有35KB, 用了zip格式压缩是110KB.)

感想

还是正则表达式快,比XmlDocument+XPath快了十倍以上!

posted on 2007-03-22 18:04  deerchao  阅读(3091)  评论(10编辑  收藏  举报