使用拼凑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等搜索引擎比较不喜欢带有?参数的页面,所以,这样的参数,最好是尽量的少;最好是没有。

转载于:https://www.cnblogs.com/dnnworkflow/articles/1314003.html

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

  1. js 在新窗口中打开URL

    在新窗口中打开 <input type="button" value="新窗口打开" onclick="window.open('http:// ...

  2. 用window.open在同一个新窗口中访问指定url【IE页面缓存问题】

    无数次尝试,拼命搜索查资料,就这么个问题花去整整5小时,残念... 好歹现在解决了. 情况如下: 想实现类似于newegg,icson等网上商城的购物车模式,即在选购商品的页面A中,点击某些链接,把商 ...

  3. 千牛计算机使用方法,如何在电脑千牛中打开移动旺店

    快捷入口: 移动旺店电脑版操作教程 移动旺店千牛手机版操作教程 现在移动旺店分网页版及电脑千牛版,手机千牛版, 如要在电脑千牛中打开移动旺店,请按如下步骤操作. 1,确保已登录(授权)过移动旺店 如果 ...

  4. win7或win8+cad2008+天正电气8.5双击cad图纸文件在新程序中打开的解决方法

    安装相信都不成问题,出问题的有两点: 1.注册天正电气一定要右键-管理员身份运行才行,注册完后,以后运行也要以管理员身份运行,嫌右键麻烦的话,可以右键图标选择属性,在兼容性标签页勾选"以管理 ...

  5. Iframe中的SSRS报表中使用windows.open在新窗口中不能打开URL中的问题

    也许你遇到这个问题,原因是windows.open 不能跨域执行,因此,访问的URL和要打开的URL要在一个域中. 转载于:https://www.cnblogs.com/coreni/archive ...

  6. php 在函数里打开链接,JavaScript中打开链接的几种方法介绍

    如何使用JavaScript打开链接?本篇文章我们就来看看使用JavaScript打开链接的几种方法介绍. 我们先来看一段代码 使用Javascript实现打开链接,需要在location.href中 ...

  7. window.open window.showModelDialog 打开一个新窗口/子窗口中调用父窗口的方法

    window.open 只打开一个窗口是将 oNewWindow   =   window   .   open   (   sURL   ,   sName   ,   sFeatures   , ...

  8. win7打开计算机 多窗口,Win7系统打开新的文件夹总会以新窗口的形式打开的解决方法...

    我们在使用Windows7系统的时候,遇到一个奇怪的问题,那就是打开文件夹时候总是在新窗口中打开,我们在文件夹选项中设置了在同一窗口打开,但是并没有任何效果.那么遇到这个问题我们该如何解决?下面装机之 ...

  9. js页面跳转 和 js打开新窗口方法

    js页面跳转 和 js打开新窗口 方法 Js返回上一页: 1. Javascript 返回上一页 history.go(-1), 返回两个页面: history.go(-2); 2. history. ...

最新文章

  1. @SupperssWarnings注解
  2. golang mysql单元测试_golang test测试使用
  3. 2014第6周六退火车票
  4. 如何让某些用户对Marketing Cloud的contact数据只能实施只读操作
  5. Cheggit解析器模块分析
  6. 【推荐实践】模型化召回在陌陌社交推荐的探索和应用.pdf(附下载链接)
  7. 当代研究生应当掌握的并行训练方法(单机多卡)
  8. DeepLabv1补充:对全连接条件随机场(Fully Connected / Dense CRF)的理解
  9. Ubuntu20.04配置mysql环境及远程连接
  10. 【时间序列预测】基于matlab麻雀算法优化LSTM时间序列预测【含Matlab源码 JQ001期】
  11. 初级药师职称需要考计算机英语吗,药师职称评审政策解读:初级药师不用再考了!...
  12. Axure图片不显示
  13. Arduino实验十二 利用雨滴传感器检测是否下雨
  14. mysql中的alter_MySQL中Alter用法
  15. python脚本实现自动刷王者荣耀金币
  16. 2017字节跳动秋招编程题-头条校招
  17. 视频转文字怎么转?这3个方法可以将视频转为文字
  18. adb按键精灵_雷电安卓模拟器修改信息及常用adb命令整理贴
  19. 电商项目之收货地址理解
  20. 实验6 蓝桥ROS1使用moveit 适用kinetic/melodic/noetic

热门文章

  1. android真机单元测试,Android 单元测试入门
  2. Linux struct itimerval用法
  3. 基于Zookeeper实现简易版服务的注册与发现机制
  4. 【5】dockerfile制作镜像
  5. Redis集群之哨兵模式
  6. SpringSecurity常用登录认证方案
  7. 专访20年技术老兵云郎:16年峰回路,每一步都是更好的沉淀
  8. 如何限制创建子网站时只能使用指定的模板
  9. 入门微信小程序(含实战) [第九篇] -- 下拉刷新和上拉加载
  10. ubuntu之iptables