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

    最后

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

  • 相关阅读:
    循环队列
    快速排序
    单链表
    数学之美总结
    我要的生活...
    北京,我来了
    冷暖自知 by 张楚
    瞎掰,关于网站的推广和如何摧毁贴吧<上>
    Adobe 拟发布WEB PS
    Web阅读摘录[持续更新]
  • 原文地址:https://www.cnblogs.com/DotNetNuke/p/1257259.html
Copyright © 2020-2023  润新知