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

Я пытаюсь добавить ссылку на скрипт на 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

10 ответов

Решение

Вы могли бы использовать 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: Согласно комментариям, если вы наблюдаете, что

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

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

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

Пытаться <%# вместо <%= на главной странице в разделе заголовка

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

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

Page.Header.DataBind();

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

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

<script runat="server" type="text/javascript" 
  src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>

Я не знаю, нашли ли вы, ребята, решение вашей проблемы или нет. Я столкнулся с той же проблемой и схожу с ума, чтобы выяснить, почему я получаю ошибку "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, но когда вы это делаете, он каким-то образом требует правильный порядок.

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

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

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

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

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

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

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

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

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

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

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

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

<script type="text/javascript" src="/full/path/to/jquery.js"></script>
Другие вопросы по тегам