Проблема с относительными путями в DotNetNuke - PullRequest
1 голос
/ 25 января 2012

Я создал пользовательский модуль dnn.Модуль это отдельная сборка конечно.В модульном проекте у меня есть папка Images.И у меня есть ужасная проблема, чтобы ссылаться на изображения с относительными путями.Я пробовал

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.Есть ли какой-нибудь правильный способ ссылки на изображения в этой папке?

Ответы [ 4 ]

8 голосов
/ 25 января 2012

В вашем файле CSS у вас есть несколько вариантов.

Использование корневого пути

background: url(/DesktopModules/MyModule/Images/MyImage.png);

это будет работать, но ТОЛЬКО если не в настройках «дочернего портала» или не виртуального каталога.

Лучший вариант, если вы можете это сделать, - сделать URL-адрес относительно самого файла CSS ...

Итак, если ваш css находится в / DesktopModules / MyModule, вы бы тогда использовали

background: url(Images/MyImage.png); 

Это должно работать в обеих ситуациях.

4 голосов
/ 22 ноября 2012

Причина: отсутствует имя сервера.На локальном компьютере адрес выглядит как http://localhost/<servername> - например, мой - http://localhost/dnn6.

Причина, по которой он не работает на локальном компьютере, заключается в том, что браузер ищет изображения на http://localhost/Images/image01.png or 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);

На моем рабочем сервере URL выглядит как

<link href="/DesktopModules/MyCustomModule/CSS/Form.css"
rel="stylesheet" type="text/css" />

и на сервере разработки,он вставляется как

<link href="/DNN6/DesktopModules/MyCustomModule/CSS/Form.css" rel="stylesheet" type="text/css" />

Теперь отредактируйте файл Form.css, чтобы он выглядел следующим образом:

background: url(../Images/image01.png)
1 голос
/ 25 января 2012

Ссылки, которые вы используете в вашем верхнем примере, обычно не работают в файле 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 начинается с начального /, обозначающего «корень сайта»

0 голосов
/ 25 января 2012

CSS-файлы ничего не знают о ~ персонаже.Путь должен быть относительно местоположения этих CSS-файлов

...