如何在DNN模块中插入一个图片--在模块中引用资源文件

DNN永远都是运行在网站的根目录

DNN的设计上最大的特点就是始终是使用一个网站根目录下的Default.aspx文件加载皮肤和模块从而实现整个网站的页面。这也就是说DNN这个Asp.net程序永远是运行在DNN网站的根目录的,所有的资源文件(如:JS文件,图片,CSS)的引用都要从DNN网站的根目录算起。

这么说有点难以理解,举个例子吧:

假设你把DNN安装到了一个虚拟目录下面,比如DotNetNuke_2目录下,那么你输入http://localhost/DotNetNuke_2就可以访问到这个DNN网站了。

然后你新建了一个模块,放到了DNN网站的DesktopModules/MyModuleName目录下。现在你新建模块在IIS中位置应该是这样的:http://localhost/DotNetNuke_2/DesktopModules/MyModuleName

问题来了

现在你需要在View.ascx文件中放入一个图片,作为界面的一部分,这个图片的名字是”CompanyLogo.gif”,位置就在”MyModuleName”这个目录下,自然,我们可以放入一个img tag,如下:

<imgsrc=””alt=”youralt”/>

现在问题来了,这个src到底是多少呢?

是使用”./CompanyLogo.gif”?我们先来试试,代码如下:

<imgsrc=”./CompanyLogo.gif”alt=”youralt”/>

最后生成的html代码跟这一样:

<imgsrc=”./CompanyLogo.gif”alt=”youralt”/>

并且图片没有显示,仔细一想,对啊,DNN是一直在根目录运行,模块只是作为一个控件加载,DNN的根目录下自然没有CompanyLogo.gif这个文件。

这样不行就使用全名指定吧,这总没问题了吧。我们来试试:

<imgsrc=”DotNetNuke_2/DesktopModules/MyModuleName/CompanyLogo.gif”alt=”youralt”/>

运行后,图片显示了,这样可以!

不过等等,如果别人用这个模块,虚拟目录可能就不是这个名字了,这个怎么处理?

ModulePath

这样的话,目录的路径就应该动态生成了,DNN已经为我们考虑了这个问题,在PortalModuleBase基类里,有一个ModulePath属性,使用这个属性就可以动态生成资源对应的路径了。

最后的代码如下:

<imgsrc=”<%=ModulePath%>CompanyLogo.gif”alt=“youralt”/>

就可以了。

在这里ModulePath 的值为 "/DotNetNuke_2/DesktopModules/ MyModuleName /"

ResolveUrl

还有一个函数可以了解一下,就是在DotNetNuke.Common.Global类中的ResoveUrl函数

PublicFunctionResolveUrl(ByValurlAsString)AsString

如果传入的URL以”~”开头,就会使用ApplicationPath代替”~”。

就是说我们可以用”~”来指代DNN的网站根目录,这样对于任何资源,我们只要使用”~”来开头,从根目录开始制定,就都可以引用到。

在这个例子里,可以这么写:

Page.ResolveUrl(“~/DesktopModules/MyModuleName/CompanyLogo.gif”)

这里

ApplicationPath的值为"/DotNetNuke_2"

最后

希望这些小技巧能帮你解决一些问题!

时间: 2024-09-13 03:14:45

如何在DNN模块中插入一个图片--在模块中引用资源文件的相关文章

java-请问论坛的帖子中插入的图片该怎么处理?

问题描述 请问论坛的帖子中插入的图片该怎么处理? 正在学习阶段,想自己实现一个基本功能都有的论坛(java),希望谁能告诉我那些大的网站都是怎么实现用户发表的帖子的,用ueditor这类的插件还是说有更为妥当的方式?又是怎么实现删除的? 解决方案 没啥好方法,你看这个问答也是,插入图片要""添加url""如不需各种富媒体添加,就自实现好了尤其对图片的添加,需要大量处理的,还是用三方插件来的快捷插件都大同小异,随意选择,ueditor界面挺漂亮(不知最近更新高亮代码的

word中插入的图片怎么命名?

  word中插入的图片怎么命名? 1.打开word插入图片,根据自己需要调整大小; 2.在图片上右击鼠标,在弹出的对话框中选择"题注"; 3.选择标签,如果没有需要的标签选择"新建标签",在弹出的窗口中输入标签内容,例"足球",然后点击确认; 4.在标签的框中,选中"足球",点击确认即可; 文档怎么重命名"> 5.这样再看图片的下面,您就可以看到您给图片标注的名字了! 6.最后一张给你放松的美图~

在word2010中插入一个笑脸图形?

在word2010中插入一个笑脸图形?   步骤 1.打开word程序. 2.打开word文档后,单击"插入"选项卡. 3.单击"形状"按钮. 4.在"基本形状"中单击笑脸那个形状. 5.在word中的适当位置按住鼠标左键拖动,这样就会画出一个笑脸来. 6.默认的颜色可以更改,我们单击"形状填充"按钮,选择适当的颜色. 7.这样,一个可爱的笑脸就完成了.

[华为机试练习题]49.向升序单向链表中插入一个节点

题目 描述: 输入一个升序单向链表和一个链表节点,向单向链表中按升序插入这个节点. 输入为空指针的情况视为异常,另外不考虑节点值相等的情况. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 详细描述: 接口说明 原型: ListNode* InsertNodeToList(ListNode* pListHead, ListNode* pInsertNode); 输入参数: ListNode* pListHead 单向链表

lightbox-css块中加了onclick事件,怎么让块中的一个图片链接不执行onclick?

问题描述 css块中加了onclick事件,怎么让块中的一个图片链接不执行onclick? css块中加了onclick事件,我想让这个块中的一个图片链接不受影响,该图片被点击后会执行一个lightbox效果,这个效果需要有,也就是说点击这个图片会触发lightbox效果但不会执行onclick,请问怎么弄?

新手-代码本是用来解决在一个链表中插入一个元素,但是运行后结果总是与本意不同。亲们帮帮忙,看看怎么错了。

问题描述 代码本是用来解决在一个链表中插入一个元素,但是运行后结果总是与本意不同.亲们帮帮忙,看看怎么错了. #include using namespace std; struct List //定义一个结构体表示线性表 { int num; struct List *next; }; int main() { List la,*p,*head,*p1,*pm; //定义线性表la //把表a的首元素地址赋给p和head int n=1,m,t; cout<<"请输入表a中的第&q

c语言-C语言插入一个数字到数组中,然后排序 麻烦各位解答一下 看代码

问题描述 C语言插入一个数字到数组中,然后排序 麻烦各位解答一下 看代码 int i,j,temp; int count[9]; printf("请输入数值:n"); for(i=1;i<=8;i++) { printf("count[%d]=",i); scanf("%d",&count[i]); } for(i=1;i<=8;i++) { for(j=i+1;j<=8;j++) { if(count[j]>co

c++模板编程问题-怎样用DEV~C++在.cpp文件中插入一个.c文件,用在.cpp的头文件中去

问题描述 怎样用DEV~C++在.cpp文件中插入一个.c文件,用在.cpp的头文件中去 .cpp文件: #include #include using namespace std; int main() { template m; m.CreateList(10); for(int i = 0; i < length; i++) cout << elem[i] << " "; cout << endl; m.Insert(2, 7); for

java-当用JDBC向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码?

问题描述 当用JDBC向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码? 当用JDBC向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码? 怎么才能解决问题,跟jdbc driver Manager的设置有关系吗? 解决方案 数据库字符集 与 页面编码 都使得 是 uft-8?得统一 解决方案二: 建议编码格式采用UTF-8的格式 解决方案三: 在使用数据的每一个节点上,其编码方式必须要一致否则就会出现乱码.特别是使用MySQL时,客户端,连接器.数据库