Проблемы главной страницы ASP.Net и пути к файлам - PullRequest
77 голосов
/ 30 марта 2009

Я пытаюсь добавить ссылку на скрипт для jQuery на моей главной странице, чтобы он работал на любой странице. В настоящее время это выглядит так

<script type="text/javascript" src="jquery.js"></script>

Проблема заключается в том, что путь всегда относится к исполняемой странице aspx, поэтому это будет работать только в том случае, если файл "jquery.js" находится в той же папке. Чтобы это работало, мне нужно изменить строку на:

<script type="text/javascript" src="../../jquery.js"></script>

Это явно не идеально, потому что он будет работать только для страниц, которые находятся на двух уровнях от корневой папки. Если я попробую следующее, IIS выдаст ошибку о неожиданном символе.

<script runat="server" type="text/javascript" src="~/jquery.js"></script>

Есть идеи?

РЕДАКТИРОВАТЬ: Я также забыл упомянуть, что скрипт ДОЛЖЕН быть в теге head

Текущий верхний ответ вызывает ошибку « ASP.NET Ajax на клиентской платформе не удалось загрузить. » при добавлении его на главную страницу. Его выбросили из JavaScript, а не из компилятора .Net. Если я переместлю ScriptManager в раздел head, где он должен быть, я получу ошибку компиляции о том, что ScriptManager должен находиться внутри тега формы.

Третий ответ вызывает исключение " Недопустимые символы в пути. " из компилятора

РЕДАКТИРОВАТЬ 2: Когда я добавляю эту строку в тег head, я получаю эту ошибку от IIS.

Невозможно изменить коллекцию Controls, поскольку элемент управления содержит блоки кода (т. Е. <% ...%>)

РЕШЕНО: Я взял отредактированный ответ из приведенного ниже ответа и поместил его в asp: ContentPlaceHolder element

Ответы [ 10 ]

110 голосов
/ 30 марта 2009

Вы можете использовать ScriptManager:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/jquery.js" />
    </Scripts>
</asp:ScriptManager>

РЕДАКТИРОВАТЬ: Если вам абсолютно нужно это в вашем разделе <head>, вы можете сделать что-то вроде:

<head>
    <script type="text/javascript" 
        src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>

РЕДАКТИРОВАТЬ 2: Согласно комментариям, если вы наблюдаете, что

Коллекция элементов управления не может быть изменена, поскольку элемент управления содержит блоки кода (т. Е. <% ...%>)

вам может потребоваться изменить вышеприведенное, чтобы использовать синтаксис привязки данных:

<head>
    <script type="text/javascript" 
        src="<%# Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>
25 голосов
/ 16 ноября 2012

Попробуйте <%# вместо <%= на главной странице в разделе заголовка

<script type="text/javascript" 
        src="<%# ResolveUrl("~/YourScriptFolder/YourJQueryOrJavascript.js") %>">
</script>

Затем в коде за главной страницей под Page_Load Событие

Page.Header.DataBind();

Теперь вы можете использовать jQuery и JavaScript, а также CSS, просто вам нужно изменить свой путь в ResolveUrl, файл, который вы хотите обрабатывать CSS, JavaScript, jQuery.

10 голосов
/ 30 марта 2009

Если вы не собираетесь использовать asp: ScriptManager или абсолютные пути, вы можете сделать это следующим образом:

<script runat="server" type="text/javascript" 
  src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>
3 голосов
/ 11 августа 2011

Посмотрите на Как запустить рут «/» . Это должно исправить все ваши проблемы с нерешенными .js путями к файлам. Вы в основном перенастраиваете сервер VS Dev для запуска своего приложения как localhost:port/, в отличие от обычного localhost:port/application name/, обеспечивающего разрешение имен таким же образом, как и в IIS.

3 голосов
/ 31 августа 2009

Я не знаю, нашли ли вы, ребята, решение вашей проблемы или нет. Я столкнулся с той же проблемой и схожу с ума, чтобы выяснить, почему я получаю ошибку "jQuery is undefined" на плагинах, которые я использую. Я перепробовал все решения, которые я получил из интернета, но безуспешно.

Но вдруг что-то всплеснуло у меня в голове, что, возможно, файлы сценария должны быть в порядке. Итак, я переместил ссылку jquery на первую позицию, и все стало работать как шарм.

Помните, ребята, если вы используете какие-либо плагины с jquery, убедитесь, что вы используете следующий порядок установки ссылок на эти поля.

  1. ссылка на библиотеку jquery
  2. ссылка на другие последующие библиотеки плагинов и так далее ...

например:.

  1. "script src =" js / jquery-1.3.2.min.js "type =" text / javascript "...
  2. "script src =" js / jqDnR.min.js "type =" text / javascript "...
  3. "script src =" js / jquery.jqpopup.min.js "type =" text / javascript "...
  4. "script src =" js / jquery.bgiframe.min.js "type =" text / javascript "...

Всегда проверяйте, нужно ли сначала указывать ссылку на jquery, а затем на последующие библиотеки.

Надеюсь, это решит вашу проблему, особенно когда вы используете MasterPages. Очень странно, что он работает независимо от того, какой порядок вы используете, когда вы не используете MasterPages, но когда вы это делаете, он каким-то образом требует правильный порядок.

Удачи и счастливого кодирования,

Винсент Д'Суза

0 голосов
/ 11 ноября 2013

Для абсолютного пути к файлу для любой страницы используйте его:

<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script> 
0 голосов
/ 12 ноября 2012
<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>
0 голосов
/ 30 марта 2009

Вы также можете использовать HTML-тег:

<base href="http://www.domain.com"></base>  

и тогда все ссылки в разделе заголовка относятся к базовому адресу:

<script type="text/javascript" src="scripts/jquery.js"></script>

Это часто полезно, когда у вас есть несколько мест назначения публикации, таких как локальный веб-сервер разработчика, демонстрационный сервер и т. Д. Вы просто заменяете этот базовый URL.

0 голосов
/ 30 марта 2009

Если этот скрипт-тег идет прямо в браузер, то вряд ли вы сможете заменить там корень своего сайта. По крайней мере, не на сервере. Так что вы можете:

  1. Развертывание сайта в корне домена назвать и использовать абсолютные пути (простейшее решение).
  2. Вставьте это связь с управлением сервером.
  3. Предварительная обработка результирующего HTML перед отправив его клиенту (с HttpResponse.Filter).
0 голосов
/ 30 марта 2009
<script type="text/javascript" src="/full/path/to/jquery.js"></script>
...