deerchao的blog

Be and aware who you are.

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 阅读(2523) 评论(10)  编辑 收藏 网摘

评论

#1楼  2007-03-22 19:45 zjy      

Good~   回复  引用  查看    

#2楼 [楼主] 2007-03-22 20:12 deerchao      

注:原先提供的下载和本页的代码中有个错误,就是HelpParser.ParseFile(string path)里那个break应该是continue.
现在两处都已经改过来了。   回复  引用  查看    

#3楼  2007-03-22 21:33 WOW玩家      

贴上文档的格式呀   回复  引用  查看    

#4楼 [楼主] 2007-03-22 21:39 deerchao      

@WOW玩家
其实很简单,文章中已经说过了。

为了直观,还是贴了一个。   回复  引用  查看    

#5楼  2007-03-23 00:45 代码乱了      

很不错!!
能提供下载demo吗   回复  引用  查看    

#6楼  2007-03-23 01:37 deerchao      

提供了,演示图片的下面就有下载地址.   回复  引用  查看    

#7楼  2007-03-23 09:56 第一控制.NET      

很cool啊,收用了。   回复  引用  查看    

#8楼  2007-03-24 15:15 蛙蛙 [未注册用户]

http://www.codeproject.com/cs/database/CsvReader.asp
这个也不错,做了 评测   回复  引用    

#9楼  2007-03-24 17:08 蛙蛙池塘      

你的正则表达式教程看完了,呵呵,什么半小时呀,我看了一下午。有几个错误的地方吧。后面一些地方看不懂,有空再看
\b(?<Word>\w+)\b\s*\k<Word>\b应该是\b(?<Word>\w+)\b\s+\k<Word>\b吧
有一处的\w+\b写错了,应该事\w*\b
有些地方尖括号和圆括号部分?   回复  引用  查看    

#10楼 [楼主] 2007-03-24 17:18 deerchao      

@蛙蛙池塘
谢谢你的指正,文章太长了,有时这些小错误很难看出来--我只能尽力避免。

半个小时确实是有点骗人,呵呵,只是用来拿来吸引人的,不过我觉得一两个小时内看完(不同时做练习的话)还是可能的。

尖括号和圆括号的问题请你说详细一点好吗,不是太明白你的意思。
  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-23 11:02 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接:


 
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

公告

给网络添加价值,就是让自己增加价值.

本博客所有内容,均为原创或对互联网已有资源的再加工,希望对你有用.在声明原作者的前提下,你可以任意使用,但本人对其正确性,使用的后果等不做任何担保,也不负任何责任.

正则表达式30分钟入门教程 v2.21 2007-8-3

I Want Spec#!

与我联系

搜索

 

常用链接

留言簿(66)

我管理的小组

我的标签

随笔档案(127)

文章分类(9)

文章档案(9)

新闻档案(9)

Links

积分与排名

最新评论