Visual Studio и ASP.Net Path вопрос - PullRequest
       2

Visual Studio и ASP.Net Path вопрос

1 голос
/ 12 февраля 2010

Вопрос о путях при работе в Visual Studio. На моей главной странице у меня есть несколько путей для загрузки CSS-файлов, а также файлов JavaScript.

Мой первый вопрос: если я использую относительные пути, должен ли относительный путь быть из местоположения файла главной страницы? Например, если я храню все свои файлы главной страницы в папке вне корня сайта, которая называется MasterPages, я должен предположить, что это отправная точка для моих относительных путей для загрузки файлов CSS? Если эта главная страница используется для переноса файла aspx на несколько каталогов вниз по дереву, все еще допустим жестко заданный относительный путь?

Второй вопрос, есть ли способ использовать абсолютные пути, чтобы все работало на моей локальной машине, а также когда я перемещаю файлы в webroot? Например, мой путь к приложению на моей локальной машине может быть localhost / myappdir / default.aspx, но когда я перемещаю приложение на сервер, myappdir не появляется, и default.aspx находится в webroot. Я не хочу менять пути в файлах после их перемещения на сервер.

В настоящее время у меня есть ..

src = "<% = VirtualPathUtility.ToAbsolute (" ~ / lib / css / style.css ")%>"

, но Visual Studio не может найти файл css для обновления intellisence

Ответы [ 4 ]

1 голос
/ 12 февраля 2010

Если вы используете относительные пути к вашим файлам CSS / Javascript, то они должны быть связаны со страницей, а не с главной страницей.

Эта статья очень хорошо объясняет варианты, которые у вас есть в этой ситуации, и в конце они предлагают хорошее решение для этого типа проблемы, пользовательский элемент управления, который отображает скрипт или ссылку тег для вас и вызывает ResolveClientUrl, чтобы сделать правильные пути.

0 голосов
/ 12 февраля 2010

Поместите ссылки на скрипт и таблицу стилей в <head Id="headRegion" runat="server" /> на главной странице. Их src / href должен быть абсолютным URL-путем, который вы получаете при запуске в WebDev.WebServer (например, /ProjectWeb).

В главной странице OnPreRenderComplete () перепишите все URL-адреса внутри headRegion.

Visual Studio может определять ваши сценарии и CSS, и проект может быть развернут по любому виртуальному пути.

protected override void OnPreRenderComplete( EventArgs e )
{
    base.OnPreRenderComplete( e );

    var root = Request.ApplicationPath;
    if (root == "/") {
        root = "";
    }

    foreach (Control c in headRegion.Controls) {
        if (c is HtmlLink) {
            HtmlLink hlink = c as HtmlLink;
            hlink.Href = ReplacePath( hlink.Href, root );

        } else if (c is LiteralControl) {
            var literal = c as LiteralControl;
            literal.Text = ReplacePath( literal.Text, root );
        }
    }
}

string ReplacePath( string content, string prefix )
{
    return content.Replace("/ProjectWeb", prefix );
}
0 голосов
/ 12 февраля 2010

Как правило, вы должны все время использовать относительные к серверу пути (как в /images/stuff.gif). Использование относительных путей (как в ../images/stuff.gif) будет каждый раз приводить вас в замешательство, так же как и попытки использовать "магию" ASP.NET, такую ​​как VirtualPathUtility.ToAbsolute и ResolveClientUrl.

Иногда на сервере вам необходимо указывать этот путь с помощью тильды (как в ~ / images / stuff.gif), чтобы он правильно перемещался по виртуальным каталогам, которые ASP.NET требует, чтобы вы основывали все свои проекты. в.

Естественно, это также означает, что вам необходимо установить в своем устройстве dev multisite , чтобы вы могли изменить свой root на что-то вроде http://mysite.dev/ и убедиться, что все ваши серверы - относительные пути работают правильно. (Использование встроенного сервера VS.NET технически обходило бы это тоже, но на самом деле, вы хотите использовать эту штуку ???)

0 голосов
/ 12 февраля 2010

Используйте оператор "~", чтобы разрешить все относительно корня. Никогда не используйте относительные пути. Даже когда я не использую темы, я использую их синтаксис, чтобы получить простой синтаксический доступ к моим CSS-файлам путем создания структуры папок, такой как: App_Themes / Style / stylesheet.css. Затем в директивах моей страницы ASPX я добавляю Theme = "Style" и мои CSS-файлы будут автоматически разрешены - не совсем обычными, но очень эффективными :-)

UPDATE:

Чтобы разрешить JS, вы можете использовать следующее в коде вашей главной страницы:

string myScript = "js/footerFix.js";
Page.ClientScript.RegisterClientScriptInclude("myKey", myScript);

С IIS7 вам не нужно ничего менять, чтобы получить поведение «нескольких сайтов»; это запекается. Например, вы можете создать несколько сайтов следующим образом и обращаться к ним через URL без какой-либо отдельной настройки, кроме создания виртуальных каталогов:

localhost / project1
localhost / project2
локальный / project3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...