如何在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"

  最后

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


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3