Asp.net 在DotNetNuke中使用相对路径发出WWW

Asp.net 在DotNetNuke中使用相对路径发出WWW,asp.net,css,dotnetnuke,relative-path,Asp.net,Css,Dotnetnuke,Relative Path,我已经创建了自定义dnn模块。 模块当然是一个单独的组件。 在模块项目中,我有文件夹图像。 我有一个可怕的问题,用相对路径引用图像。 我试过了 background: url(~/Images/image01.png) background: url(~/MyCustomModule/Images/image01.png) background: url(~/DesktopModules/MyCustomModule/Images/image01.png) etc. 什么都不管用。 唯一可行的

我已经创建了自定义dnn模块。 模块当然是一个单独的组件。 在模块项目中,我有文件夹图像。 我有一个可怕的问题,用相对路径引用图像。 我试过了

background: url(~/Images/image01.png)
background: url(~/MyCustomModule/Images/image01.png)
background: url(~/DesktopModules/MyCustomModule/Images/image01.png)
etc.
什么都不管用。 唯一可行的方法是当我写下以下内容时:

background: url(../../DesktopModules/MyCustomModule/Images/image01.png)
但这在我的生产服务器上有效,但在我的本地dnn安装中无效。
是否有适当的方法引用此文件夹中的图像?

您在上面的示例中使用的链接在CSS文件中通常不起作用。~是ASP.NET处理的特殊对象,指示应用程序的根。您的CSS文件将不知道这是什么,并将逐字传递,这可能会破坏链接

是否可以使用以斜线开头的根路径,而不是使用相对路径?对于文件所在的位置,什么是正确的:

background: url(/DesktopModules/MyCustomModule/Images/image01.png)
background: url(/MyApplication/DesktopModules/MyCustomModule/Images/image01.png)
background: url(/MyApp/Subdir/DesktopModules/MyCustomModule/Images/image01.png)

只需确保URL以前导/开头,表示网站的根目录

您在上面的示例中使用的链接在CSS文件中通常不起作用。~是ASP.NET处理的特殊对象,指示应用程序的根。您的CSS文件将不知道这是什么,并将逐字传递,这可能会破坏链接

是否可以使用以斜线开头的根路径,而不是使用相对路径?对于文件所在的位置,什么是正确的:

background: url(/DesktopModules/MyCustomModule/Images/image01.png)
background: url(/MyApplication/DesktopModules/MyCustomModule/Images/image01.png)
background: url(/MyApp/Subdir/DesktopModules/MyCustomModule/Images/image01.png)

只需确保URL以前导/开头,表示网站的根目录

css文件不知道有关~character的任何信息。路径应该相对于那些css文件的位置

css文件不知道有关~character的任何信息。路径应该相对于css文件中那些css文件的位置,您有几个选项

使用根路径

background: url(/DesktopModules/MyModule/Images/MyImage.png);
这将起作用,但仅当不在子门户或非虚拟目录设置中时才起作用

如果你能做到这一点,最好的选择是使URL相对于css文件本身

所以,如果您的css位于/DesktopModules/MyModule中,那么您将使用

background: url(Images/MyImage.png); 

这在两种情况下都应该有效。

在CSS文件中,您有几个选项

使用根路径

background: url(/DesktopModules/MyModule/Images/MyImage.png);
这将起作用,但仅当不在子门户或非虚拟目录设置中时才起作用

如果你能做到这一点,最好的选择是使URL相对于css文件本身

所以,如果您的css位于/DesktopModules/MyModule中,那么您将使用

background: url(Images/MyImage.png); 

这在两种情况下都应该有效。

原因:缺少服务器名称。在本地计算机上,地址如下所示http://localhost/ -比如我的http://localhost/dnn6.

它在本地计算机上不工作的原因是浏览器正在查找本地计算机上的图像http://localhost/Images/image01.png 或http://localhost/DesktopModules/MyCustomModule/Images/image01.png.

我更喜欢在代码后面插入css和其他脚本。这样就包括了服务器名,并且它可以在生产服务器和开发服务器上工作

LiteralControl litScripts = new LiteralControl();
litScripts.Text +="<link href=\"" + this.TemplateSourceDirectory + 
"/CSS/Form.css\" rel=\"stylesheet\" type=\"text/css\" />";
Page.Header.Controls.Add(litScripts);

原因:缺少服务器名称。在本地计算机上,地址如下所示http://localhost/ -比如我的http://localhost/dnn6.

它在本地计算机上不工作的原因是浏览器正在查找本地计算机上的图像http://localhost/Images/image01.png 或http://localhost/DesktopModules/MyCustomModule/Images/image01.png.

我更喜欢在代码后面插入css和其他脚本。这样就包括了服务器名,并且它可以在生产服务器和开发服务器上工作

LiteralControl litScripts = new LiteralControl();
litScripts.Text +="<link href=\"" + this.TemplateSourceDirectory + 
"/CSS/Form.css\" rel=\"stylesheet\" type=\"text/css\" />";
Page.Header.Controls.Add(litScripts);

当我键入“background:url/DesktopModules/MyCustomModule/Images/image01.png”时,它适用于生产,但不适用于本地dnn:当我键入“background:url/DesktopModules/MyCustomModule/Images/image01.png”时,它适用于生产,但不适用于本地dnn: