快速业务通道

使用拼凑URL的方法,实现DotNetNuke在新窗口中打开内容(三)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

在前面的文章中,我们介绍了如何通过一系列的“擦边球”,使得DotNetNuke可以更加符合我们国人的网页浏览习惯,而这些修改,是不能动到DotNetNuke的核心的,我们总共所做的修改如下:

1、在根目录下增加一个新的Edit.aspx,并且修改其代码,使之所加载的皮肤与Default.aspx页面不同;

2、在Portals/_default/Skins/[当前使用的皮肤目录]下增加一个皮肤,这个皮肤是最简单的,只包括DotNetNuke的几个Pane而已,不包括其他任何的内容;

3、我们需要修改SiteUrls.config文件,从而要使得DotNetNuke能够“认识”我们的Edit.aspx文件;

主要的修改,就是这么多,具体的效果,大家可以点击这个地址看一下效果,当然,也可以进入到这个网站,进入到其中的Demos下各个页面中,查看一下效果。

为了让大家更加清楚的了解我们所做的工作的意义,下面以问答的形式,让大家更清楚的知道我们的工作是有必要的、而不是无用功。

问:为什么非要在根目录级别下增加页面文件?难道在模块目录下增加aspx文件,在新窗中打开我的aspx文件不一样是可以的吗?

答:当然,我们可以在模块目录下增加aspx文件,而不是通常我们在模块开发中所使用的ascx控件;也可以使用如/DesktopModules/Module1 /openhere.aspx这样的URL形式来实现在新窗口中打开页面,这个页面就完全是由我们进行控制的了。但是,有一个问题,就是如果我们在模块级别增加的是一个aspx文件的话,这个页面实际上并不是我们的模块的控制(Control)之一,也就是说,很多属于模块的属性,比如ModuleID、 TabID等等变量,我们可能都需要通过URL参数或者其他的方式传到这个页面上去。如果我们这样做的话,实际上,这个aspx页面已经完全脱离了我们模块的设计架构,从而变得更加“另类”了。只有极少数的情况下,我们才这么做:比如说,我们所打开的数据并不是和模块绑定的(比如说公共数据,如另外一个网站的数据等)。而如果我们所打开的新页面是用来显示模块级的数据的话,大家就会发现,一定会非常麻烦,比我们现在所使用的方式更加麻烦。

大家可以看到,上面所采用的增加Edit.aspx的方式,实际上是在更底层解决这个问题,而不是模块级别,所以,我们的解决办法,不会影响到模块级的数据。

以上的解释可能有点混乱,但是我相信曾经尝试过在模块级增加aspx文件的可以了解这一点。

问:如http://www.dnnworkflow.cn/tabid/55/ctl/Edit/mid/374/KeyID/5/RowID/22/Edit.aspx?ContainerSrc=[G]Containers/_default/No%20Container这样的URL中,Default.aspx后面仍然跟了参数,也就是?ContainerSrc=[G]Containers/_default/No%20Container,这个参数有什么意义?

答:我们知道,DotNetNuke的皮肤机制是包括两部分的,一个是Skin,一个是Container,分别对应于站点的皮肤,和容器的皮肤——就是指我们所用到的一个个模块的皮肤了。我们现在在新窗口中打开页面,实际上就是将一个模块的一部分(也就是一个控制 Control)在新窗口中予以展现,如果没有以上参数的话,大家可以看到,显示的内容,是被容器的皮肤所包围的。当然,如果大家觉得没有所谓的话,大可以将这个参数去掉。我之所以增加这个参数,是考虑到如果使用window.print命令的时候,可以有更好的页面打印效果。

问:DotNetNuke实际上已经提供了无皮肤、无容器的方式,也就是当点击每一个模块下面的“打印”按钮的时候所出现的页面,其地址可能是:http://www.dnnworkflow.cn/Demos/申请流程/tabid/55/mid/374/dnnprintmode /true/Default.aspx?SkinSrc=[G]Skins/_default/No+Skin&ContainerSrc= [G]Containers/_default/No+Container,注意其中Default.aspx后面的参数,已经指定了当前的页面不引用皮肤、不引用容器,为什么我们还要如此麻烦的增加Edit.aspx并且做如此多的设置呢?

答:这个问题问的不错。实际上,确实是,当我们在Default.aspx后面增加上述的参数的时候,DotNetNuke自动将所有的皮肤、容器全部都去掉了。假设我们开发一个模块,这个模块的一个link是在新窗口中打开当前模块的另外一个控制的话,那么,是的,得到的效果非常近似于我们前面所做的内容:没有皮肤、没有容器,只有内容(这个大家可以自行试验一下)。但是,有一个问题我相信大家也会注意到,就是,使用这种方式的时候,我们页面上所设置的所有的CSS都无效了!如果我们需要单独为我们的页面定义CSS的话,那样就不太好了,也就是说,我们的模块脱离了系统的皮肤,这样实际上并不好。当然,我们似乎可以通过修改No Skin.ascx文件,使之增加CSS的解析;但是我们又考虑到,Google等搜索引擎比较不喜欢带有?参数的页面,所以,这样的参数,最好是尽量的少;最好是没有。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号