ASP.NET - путь к ссылкам.CSS и.JS

У меня есть мастер-страница в корне моего проекта. У меня есть контент-страницы в моем проекте и во вложенных папках, ссылающихся на эту мастер-страницу. Как правильно ссылаться на мои файлы.CSS и.JS, если я всегда хочу, чтобы они были относительно корня?

Вот как я это делаю сейчас:

link href = "/ common / css / global.css"
script src = "/ common / javascript / global.js"

Но это нарушает связь. Я попытался без начального "/", но это не сработало на моих страницах в подпапках.

4 ответа

Решение

Я бы использовал что-то вроде

Server.ResolveClientUrl("~/common/css/global.css")

Это будет получать правильный URL-адрес для вас в любое время.

Пример:

Согласно комментарию это будет полное использование.

<link type="text/css" rel="stylesheet" 
    href='<%= Server.ResolveClientUrl("~/common/css/global.css") %>' />

Согласно комментариям, другое проверенное использование, нет "ошибка CS1061:" System.Web.HttpServerUtility "не содержит определение" ошибка:

    <script type="text/javascript" 
src="<%= Page.ResolveUrl("~/Scripts/YourScript.js") %>" ></script>

Также важно всегда ставить закрывающий тег.

Вы можете сделать <link> тег для запуска на сервере, поэтому Asp.Net разрешит URL для вас следующим образом:

<link href="~/common/css/global.css" runat="server" />

(Обратите внимание на '~')
Я не знаю, может ли это быть применено к <script> пометьте, хотя, вы должны попробовать...

РЕДАКТИРОВАТЬ: я недавно обнаружил в проекте, что вы можете (и должны) использовать ScriptManager держать ваши скрипты (вы можете иметь только 1 на страницу). Вы можете поместить один в вашу MasterPage и ссылаться на все ваши скрипты. Внутри вашей контентной страницы вы затем добавляете ScriptManagerProxy это будет ссылаться на сценарии на главной странице, и вы даже можете добавить другие сценарии только для этой страницы содержимого.

Я делаю это так просто: link href="<%=ResolveUrl("~/common/css/global.css")%>"

Решения, которые я видел до сих пор, не работали в моем проекте (особенно не для ссылок.css). Проблемы были следующие:

  • внутри <link> это не решило <%=...%> выражение
  • он не нашел Page.ResolveURL во всех случаях
  • возникли проблемы с кавычками "и", если вы вставили <%=...%>

Поэтому я хотел бы предложить следующее решение: В коде (класс C# вашей главной страницы) добавьте следующие 3 метода:

public partial class SiteBasic : System.Web.UI.MasterPage
{
    public string ResolveURL(string url)
    { 
        var resolvedURL=this.Page.ResolveClientUrl(url);
        return resolvedURL;
    }

    public string cssLink(string cssURL)
    {
        return string.Format("<link href='{0}' rel='stylesheet' type='text/css'/>", 
                    ResolveURL(cssURL));
    }

    public string jsLink(string jsURL)
    {
        return string.Format("<script src='{0}' type='text/javascript'></script>", 
                    ResolveURL(jsURL));
    }
}

Для ссылок на таблицу стилей вы можете сказать:

<%=cssLink("~/css/custom-theme/jquery-ui-1.8.20.custom.css")%>

Для ссылок JavaScript это выглядит так:

<%=jsLink("~/Scripts/jquery-1.7.2.js")%>

А для других ссылок вы можете использовать:

<a href='<%=ResolveURL("~/Default.htm")%>'>link</a>
<img title='image' src='<%=ResolveURL("~/Images/logo.png")%>'/>

Примечание: я обнаружил, что лучше использовать одинарные кавычки снаружи и двойные кавычки внутри атрибута href или src, как показано в примере выше. В некоторых случаях, как я обнаружил, выполнение этого действия вызывало проблемы.

Это простое решение, и оно хорошо работает в моем случае, даже если страницы, ссылающиеся на главную страницу, находятся в разных подкаталогах. Что он делает в основном перевод ~ путь (который должен быть абсолютным от корня вашего веб-сайта) в относительный путь (используя как можно больше ../ в пути по мере необходимости) на основе страницы, которую вы в настоящее время отображаете.


Расширенный совет:

Если вы используете вызовы AJAX для вызова методов веб-службы, то у вас возникнет та же проблема со ссылками на них, если у вас есть страницы ASPX на разных уровнях каталогов. Я рекомендую вам определить что-то вроде (при условии, что ваши веб-сервисы находятся в каталоге ~/AJAX):

<script type="text/javascript">
    function getWebServicePath() { return '<%=ResolveURL("~/AJAX/")%>'; } 
</script>

внутри <head> ... </head> раздел вашей главной страницы. Это сделает путь входа в веб-сервис доступным в вашем JavaScript. Вы можете использовать его как

$.ajax({
    type: "POST",
    url: getWebServicePath()+"myWebService.asmx/myMethod",
    data: $.toJSON({ param: "" }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
            // ... code on success ...
    },
    error: function (ex) {
            // ... code on error ...
    }
});
Другие вопросы по тегам