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

在前面的文章中,我们介绍了如何通过一系列的“擦边球”,使得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等搜索引擎比较不喜欢带有?参数的页面,所以,这样的参数,最好是尽量的少;最好是没有。

时间: 2024-08-22 08:06:00

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

Win8系统无法同时在新窗口中打开多个文件夹的解决方法

  同一个桌面中可以打开多个文件夹,这在win8系统中已不是什么值得惊讶的事了,因为这在XP系统中,是肯定能够实现的,大家也都习惯于同时打开多个文件夹,这在我们平时办公的时候使用的最多,在核对某一个报表时,都会需要用到另一个文件夹里信息,所以难免的多打开几个文件夹,这不是什么难题.但是win8的用户有遇到在同一个窗口下不能打开多个文件夹的情况,下面小编针对这个问题来给出解答. 方法一: 1.Win+R调出运行 ,输入"regedit"回车或确定打开注册表; 2.然后找到注册表这一项:H

IE8浏览器无法在新选项卡中打开网页的解决方法

当ie8浏览器右键打开连接时没有在新选项卡中打开此项时,一般是有三个原因引起的 1.由用户自己误操作引起的 2.用户或其他来意软件直接禁用了选项卡浏览模式. 3.ie本身出现故障引起的. 首先就是需要打开IE8浏览器选项进行设置了,可以直接在桌面的IE8图标上右键,选择属性即可打开IE8选项设置. IE8如果只是一个快捷图标的话,右键时不会出现这样的菜单的. (IE8打开Internet选项设置方法) 如果桌面只是一个图标的话,可以直接打开IE8浏览器,然后在IE8浏览器上面工具栏中,找到工具并

电脑中无法在IE浏览器新选项卡中打开链接的解决方法

  电脑中无法在IE浏览器新选项卡中打开链接的解决方法         1.重置IE浏览器:打开Internet选项,在"高级"选项卡中,点击"重置"按钮来重置IE浏览器; 2.重置后如果没有解决问题,则按Win+R打开运行,输入gpedit.msc,点击确定,打开"本地组策略编辑器"; 3.在左侧依次展开用户配置-管理模版-Windows组件-Internet Explorer,双击打开右侧的"关闭选项卡分组"; 4.看看是

Win7系统新窗口下打开文件夹的方法

  操作方法: 1.打开计算机,点击"组织"-"文件夹和搜索选项"; 2.在"文件夹选项"窗口的常规选项中,选择"在不同窗口中打开不同的文件夹",点击应用并确定即可.

JQuery实现的在新窗口打开链接的方法小结_jquery

第一种:下面的代码是针对jb51这个样式下的a都是在新窗口打开 复制代码 代码如下: <script type="text/javascript"> jQuery(document).ready(function($) { $('.jb51 a').attr({target: "_blank"}); }); </script> 第二种: 复制代码 代码如下: <script src="http://code.jquery.co

三种方法让Response.Redirect在新窗口打开_实用技巧

Response.Rederect在默认情况下是在本页跳转,所以除了在js中用window.open或是给A标签添加target属性之外,在后台似乎不能来打开新的页面,其实不然,通过设置form的target属性同样可以让Response.Rederect所指向的url在新的窗口打开.下面用三种方法来实现. 1 .给form指定target属性,那么本页面中所有的Response.Rederect都将在新的窗口中打开.代码如下: 复制代码 代码如下: protected void Page_Lo

Ajax请求响应中用window.open打开新窗口被拦截的解决方法_AJAX相关

一.问题描述 ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是会被浏览器给拦截了,需要用户点下. 二.问题分析 浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截. 说明: 1.如果是在 <a href="javascri

Ajax请求响应中用window.open打开新窗口被拦截的解决方法

一.问题描述 ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是会被浏览器给拦截了,需要用户点下. 二.问题分析 浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截. 说明: 1.如果是在 <a href="javascri

一下子全部删除WORD括号中的内容的方法

一.前提条件 执行菜单操作:"编辑"→"替换",弹出对话框. 然后,在对话框中,先点击"高级"按钮,弹出列表,在列表中,选中"使用通配符"选项. 接着,就按如下的方法来实现替换吧. 二.批量删除的方法 ①批量删除大括号中的内容 在查找内容框中,输入 {*} 然后,直接点击"全部替换"即可. ②批量删除小括号中的内容 在查找内容框中,输入 (*) 然后,直接点击"全部替换"即可. ③批量删