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

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

Любые идеи?

EDIT: Я забыл упомянуть, что script ДОЛЖЕН быть в теге head

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

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

EDIT 2: Когда я добавляю эту строку в свой заголовок, я получаю эту ошибку от IIS.

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

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

Ответ 1

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

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

EDIT: Если вам это абсолютно необходимо в разделе <head>, вы можете сделать что-то вроде:

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

EDIT 2: Согласно комментариям, если вы заметили, что

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

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

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

Ответ 2

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

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

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

Page.Header.DataBind();

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

Ответ 3

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

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

Ответ 4

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

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

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

  • ссылка на библиотеку jquery
  • ссылка на другие последующие библиотеки подключаемых модулей и т.д.

например:.

  • "script src=" js/jquery-1.3.2.min.js "type =" text/javascript "...
  • "script src=" js/jqDnR.min.js "type =" text/javascript "...
  • "script src=" js/jquery.jqpopup.min.js "type =" text/javascript "...
  • "script src=" js/jquery.bgiframe.min.js "type =" text/javascript "...

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

  • Разверните сайт в корне домена имя и использование абсолютных путей (простейшее решение).
  • Вставьте это связь с сервером.
  • Предварительно обработанный HTML-код перед отправка его клиенту (с HttpResponse.Filter).

Ответ 8

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

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

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

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

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

Ответ 9

<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>

Ответ 10

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

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