HttpModule 是个好东西,很多程序都有用到,例如DotText、Asp.Net Forums等,但是有一个问题,当我们将使用了HttpModule 的程序设置为站点根目录(以将DotText设置为站点目录为例),然后再在根目录下建虚拟目录,运行虚拟目录里的asp.net程序会提示出错:
分析器错误信息: 找不到文件或程序集名称“Dottext.Web”,或找不到它的一个依赖项。
源错误:
行 145: 行 146: <httpModules> 行 147: <add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" /> 行 148: </httpModules> 行 149: |
也就是说对于虚拟目录中的asp.net应用程序,会首先去加载其所在站点中的HttpModule,而一般虚拟目录中的bin目录是不会有HttpModule所在的DLL的,所以就会出如上的错误。
注意,其中的错误提示信息(找不到文件或程序集名称“Dottext.Web”,或找不到它的一个依赖项。)很有误导性,一开始让我以为是需要每个虚拟目录拷贝一个Dottext.Web.dll进去呢,但是将dll拷贝过去后,其HttpModule会对虚拟目录中的asp.net应用程序产生影响,因此这个问题曾让我郁闷了很久。
后来偶然查msdn中,发现web.config里面的HttpModule是有三种子节点的:
<httpModules>
<add type="classname,assemblyname" name="modulename"/>
<remove name="modulename"/>
<clear/>
</httpModules>
| 子标记 |
说明 |
| <add> |
将 HttpModule 类添加到应用程序。 请注意,如果以前已指定了相同的谓词/路径组合(例如在父目录的 Web.config 文件中),则对 的第二个调用将重写以前的设置。 |
| <remove> |
从应用程序移除 HttpModule 类。 |
| <clear> |
从应用程序移除所有 HttpModule 映射。 |
唉,其实看到add也应该想到remove的,在虚拟目录中的web.config中Remove一下不需要的HttpModule,发现果然没有问题了!如:
<httpModules>
<remove name="ServiceRouter"/>
</httpModules>
注意一般表用<clear/>,因为用<clear/>会把machine.config中定义的httpModule一起清除了从而导致asp.net程序不能正常运行。
有一点我很疑惑的是既然都是用remove移除这个HttpModule了,为什么还需要将该HttpModule对应的dll拷贝到虚拟目录的dll下。
httpHandlers的处理方法也类似。
在我们写程序时,不可避免的要经常写有用户验证功能的界面,一个常见但可能被忽视的问题就是,究竟应该是“登录”系统?还是“登陆”系统?用拼音输入法时两个字的发音都是dēnglù,而似乎都可以表示进入系统的意思。
在网上,关于登录和登陆似乎都是通用的,可能在同一个网站中,有的网页用的是“登陆”,而另一个网页又用的是“登录”
,但是对于一些相对正规的大网站(如微软,Sina等),都是是用“登录”而基本没有用“登陆”的。
之前我也一直没注意到这个问题,有次项目中技术总监特地给我们详细解释了一下,应该用“登录”而不是“登陆”,当时是怎么解释的我忘记了,倒是记住了应该是“登录”,所以现在看到“登陆”都比较过敏了。
我语文不够好,无法给大家解释为什么应该是“登录”而不是“登陆”,给大家提个醒,如果谁能有比较正规的解释欢迎补充
附金山词霸中关于两个词意的解释:
登陆dēnglù
渡过海洋或江河登上陆地
登录dēnglù
列入;记载
序
CS1.0 Beta经过几天的跳票,在N多人的期待下终于匆匆发布,而且没有开源,说是要Release才开源,天知道会不会开源!
安装篇
您可以从http://www.communityserver.org/下载,下载后,是一个压缩包,解压后,有一个readme.txt,是安装说明,按照上面一步步操作即可。安装非常简单,首先为解压后的web文件夹设虚拟目录为http://localhost/cs,然后根据data文件夹中的sql安装数据库,不过安装数据库时要注意一下:
执行Data\CS_2004_11_17_Full.sql 脚本,会自动创建一个数据库,但是安装的SQL文件在中文SQL Server上会提示排序规则冲突,必须对SQL作如下修改(谢谢progame的帮助):
找到sp: forums_Posts_UpdatePostsInCategories
where
C.[Category] is not null
and C.[Category] not in (
Select [Name] FROM forums_Post_Categories where CategoryType = @CategoryType and ForumID = @ForumID
)
修改为:
where
C.[Category] is not null
and C.[Category] COLLATE Latin1_General_CI_AS not in (
Select [Name] FROM forums_Post_Categories where CategoryType = @CategoryType and ForumID = @ForumID
)
就是在not in前面加上COLLATE Latin1_General_CI_AS
然后执行Data\DefaultCommunity.sql脚本创建默认站点(默认站点:http://localhost/cs;账号/密码:admin/pa$$word),执行完后会有一些警告错误信息,不过不用管他。
注意要给root/blogs 和 root/gallery 文件夹有写的权限。
使用篇
安装完后就可以用http://localhost/cs 来访问传说中的Community Server 1.0 了,首页很简单,主要是Forums/Blog/Photo Galleries的介绍和链接。
首先进入Forums,发现Forums和原来的Forums2.01没有任何区别,只是这时候还没有任何板块/讨论组,使用默认的管理员账号/密码(admin/pa$$word)登录,进入后台(http://localhost/cs/admin),发现后台已经大变样了!
先进入System选项,有一排链接,分别是:
Manage Blogs|Manage Forums|Manage Galleries|Configuration|Reports|Tools

这里的Configuration|Reports|Tools就是以前Forums后台管理中的一些内容,这里就不多介绍。
Manage Blogs|Manage Forums|Manage Galleries实际上内容是一样的,都是管理各自的“组”、“分类”,权限分配,以Manage Blogs为例:

进入"Manage/Create Blogs and new groupings":

可以方便的管理/创建Blog分组/blog。同时,每创建一个blog,会在Web\blogs目录下创建相应的文件夹和空的default.aspx文件(这就是为什么该目录需要“写”的权限了),Blog名不能为中文。
这里可以给每个blog分配角色,选择哪些角色可以对该blog进行相关操作:

设置某角色对该Blog有何种权限:

Manage Forums、Manage Galleries和Manage Blogs基本类似。
新建好Blog后,就可以对建好的Blog进行管理更新了:

Blog的操作和原来的DotText基本上差不多的,可以方便的发表随笔/文章:

在System中建好相册类别后,也可以对相册进行管理了:

上传照片还是很方便的:

相册的配置选项:

后台上传完照片,到前台看看效果:

Blog还是老样子,看看Blog首页:

进入某个Blog:

技术篇
因为CS1.0 Beta没有开源而我也没深入研究,所以只是从有限的资源进行简单分析了一下。从数据库、命名空间和目录结构等可以看出,Community Server是在Forums的架构基础上,加上了Blog和相册,继续保持了Forums的换皮肤,多语言等特性。
数据库
数据库还是在Forums的数据库基础上,包括forums_的前缀大部分都还在(可能会要改掉),用户资料已经转移到aspnet_Users表和aspnet_Membership表中,三个系统共用。角色也转移到aspnet_Roles表中。cs_ApplicationType表主要保存Community Server中的系统类别,目前有论坛/blog/相册。blog和Forums的帖子内容都forums_Posts表中。有几个cs_和aspnet_开头的表作用暂时还不是很清楚,需要等文档和源码后才方便分析。
目录结构
Forums/Blogs/Gallery在web根目录下分别有单独目录,另外一些公用文件夹,如FreeTextBox、Languages、Msgs、Themes等都在根目录下,Blogs和Gallery中,每创建一个blog/相册就会在其目录下创建一个相应的文件夹和空的default.aspx,类似于DotText中用来做url重定向用。
后记
Community Server总的来说还是挺不错的,安装后就有了一个强大的论坛/blog/相册系统,对于一般网站来说可以足够用了,虽然还有很多很多bug,但是毕竟还只是Beta版,还在慢慢完善中。可惜没有开源,所以一些比较好的设计思想还没能深入学习了解。
有一点我还是很疑惑,我本以为用户新注册后就可以有自己的blog/相册,但是我发现blog/相册只能管理员开通/维护,而且如果需要让某用户可以维护一个blog/Gallery,那么必须为这个用户先建一个角色,然后让这个角色可以维护某个Blog/Gallery,并让该用户属于这个角色。如果要给每个用户开通一个blog/Gallery,那岂不是要给每个用户新建一个角色,再让这一个个角色和这一个个blog/Gallery对应起来?!
Release发布估计是明年的事情了,不过现在也不如以前那么期待了!
在Web开发时,不可避免要用到CSS,把我这几年在Web开发过程中积累的一些不常用但是很实用的CSS整理了一下,希望对大家有所帮助!
filter:chroma(color:#FFFFFF);
让指定的背景色透明,例:
 |
 |
|
未使用该滤镜 |
使用该滤镜 |
word-break:break-all;
强制换行,例:
当未使用该样式时,虽然我设置了表格宽度为100px,但是面对这样连续的字符,表格无法自动换行,表格会被撑破:
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
再看看使用该样式后的效果:
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
writing-mode:tb-rl;
用于设置文本的书写方向,可以有两个取值:
lr-tb:表示左右-上下,left right - top bottom
tb-rl:表示上下-右左,top bottom - right left
需要 IE 5.5+ 才支持,例:
第一组垂直文字第一组水平文字第二组水平文字
第二组水平文字第三组竖直文字第三组水平文字
text-indent:2em;
首行缩进,例:
有时候,我们需要将段落的首行缩进两个文字,一般我们都是用4个HTML的空格( )来实现,其实我们还可以用样式表来达到这种效果!
background-color: transparent;
transparent表示透明色,例:
border-collapse:collapse;
它会自动把相同的边框线合并,例:
不使用border-collapse:collapse;
使用border-collapse:collapse;
background-position: 0 -78;
设置背景图片的位置,例:
《background-position的妙用》
table-layout: fixed;
固定布局的算法。在这算法中,水平布局是仅仅基于表格的宽度,表格边框的宽度,单元格间距,列的宽度,而和表格内容无关。也就是说,内容可能被裁切,例:
看看我以前写的一个仿msn的htc网格中应用这个属性的效果吧,仿照MSN的网格,单元格中文字过长会自动被截取(在Table中使用样式table-layout: fixed;),鼠标移上会全部显示(使用一个浮动的层覆盖在上面):
演示 下载
display:inline;
设置或检索对象是否及如何显示,inline表示内联,例:
大家都知道两个表格在一起,默认是会自动换行的,但是利用display:inline;属性可以让两个表格并排在一起:
overflow: auto;
检索或设置当对象的内容超过其指定高度及宽度时如何管理内容。auto : 在需要时剪切内容并添加滚动条,例:
| 使用前的TextArea |
使用后的TextArea |
|
|
font:12px/18px;
字体大小/行高,例:
| 未使用CSS |
使用该CSS |
|
在这里行高是系统默认的,不会受影响的
|
这里的12px就表示字体大小,18px其实就等价于css中的line-height。 |
clip : rect ( 0 64 64 0 )
字体大小/行高,例:
原图:

裁减后:
可以利用这个来做动画:)
font-size:
expression(document.body.clientWidth / 20);
expression是IE浏览器特有的功能,可以直接执行脚本而算出css的值,例:
《CSS也能控制表格的交替颜色 》
字体大小随着浏览器大小而变化,始终为浏览器宽度的1/20
对于支持HTML的BBS来说,这可能会是一个安全隐患!
position: absolute;
这个我想绝大多数人都知道——绝对定位,我所要说的是偶然发现的一个隐含功能,例:
当给一个网页元素的CSS设置为"position: absolute;",那么它会绝对定位,然后根据css中的left,top属性确定自己的位置。但是如果我们仅仅设置一个元素样式表的"position: absolute;"属性,而不设置其left,top属性,那么该元素会浮在其html所在位置。看个例子,我将一个tr的CSS设置为"position: absolute;":
第一行浮在第二行上了,这个特性可以很方便的来制作重叠效果,例如我以前写过的自定义按钮和flash播放器都用到了这个特性来实现重叠:
自定义按钮:一个自定义按钮,底下是一个普通的Button,利用"position:absolute;"在Button上面覆盖图片,这样看起来就像自定义按钮,而实际点击确是点击底下真实的Button(
下载)
Flash播放器:这个播放器的进度条就是通过这种方法来重叠的。(
下载)
community server 是rhoward离开微软成立telligentsystems后,其公司的第一个产品,集成了论坛(Asp.Net Forums),Blog(DotText),相册(nGallery),同时将会和DNN3.0合成,并且会继续开源,令人期待,希望到时候不会跳票。
rhoward 已经在Community Server 的官方论坛已经发布了公告,原文:
Within the next 2 weeks we will be announcing the availability of Community Server 1.0 beta.
Highlights:
- New administration UI
- Integrated blogs, forums, and gallery
- Forwards compatible with ASP.NET 2.0 Membership, Role Manager, and Personalization
- Provider based design for many features
- Support for add-ons
- Revamped and extended permissions
More soon 
We're putting some screenshots of the new capabilities in the new gallery feature now!
如果您想进一步了解CS,请看《Community Server Roadmap and Vision 》
看看截图:
