如何在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,如下:

<img src=”” alt=”your alt” />

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

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

<img src=”./CompanyLogo.gif” alt=”your alt” />

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

<img src=”./CompanyLogo.gif” alt=”your alt” />

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

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

<img src=”DotNetNuke_2/DesktopModules/MyModuleName/CompanyLogo.gif” alt=”your alt” />

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

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

ModulePath

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

最后的代码如下:

<img src=”<%= ModulePath %> CompanyLogo.gif” alt = “your alt” />

就可以了。

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

ResolveUrl

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

Public Function ResolveUrl(ByVal url As StringAs String

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

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

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

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

这里

ApplicationPath的值为"/DotNetNuke_2"

最后

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

原文地址:https://www.cnblogs.com/DotNetNuke/p/1257259.html