Проблеми з головною сторінкою ASP.Net та шляхом до файлу


78

Я намагаюся додати посилання на скрипт до 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: Я забув також згадати, що сценарій ПОВИНЕН бути в тезі head

Поточна відповідь видає помилку " Не вдалося завантажити платформу ASP.NET Ajax на стороні клієнта. ", Коли я додаю її на головну сторінку. Його викинуто з javascript, а не з компілятора .Net. Якщо я переміщу ScriptManager до розділу head, де він повинен бути, я отримую помилку компіляції про ScriptManager, який повинен бути всередині тегу форми.

Третя відповідь викидає компілятор винятку " Незаконні символи на шляху. "

EDIT 2: Коли я додаю цей рядок до мого тегу head, я отримую цю помилку від IIS.

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

ВИРІШЕНО: Я взяв відредаговану відповідь із відповіді нижче та помістив її всередину елемента asp: ContentPlaceHolder


Відповіді:


110

Ви можете використовувати 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>

Так, це настійно рекомендований метод у багатьох книгах про ASP.NET, які я писав, маючи на увазі шляхи на головних сторінках.
Kezzer

FYI, ми з колегою просто спробували це. Здається, це не працює у сценарії вкладеної головної сторінки на батьківській головній сторінці . Однак переміщення його на головну сторінку дитини зробило свою справу.
технологічний

3
Це спрацювало для мене майже на всіх моїх сторінках, але для 2-х сторінок, які підірвались би, з певним винятком: "Колекція елементів керування не може бути змінена, оскільки елемент керування містить код". Рішення полягає в тому, щоб змінити сценарій включення в заголовок з блоку коду response.write на оцінювач прив'язки даних (тобто - змінити <% = на <% #). Я б ризикнув здогадуватися, що це якась спроба з боку МС зупинити атаки заголовків http. Найкраще пояснення цього легко виправити , можна знайти по адресою: leedumond.com/blog / ...
Jagd

Використовуючи base href?
PreguntonCojoneroCabrón

@Jagd leedumond.com/blog/… не знайдено
PreguntonCojoneroCabrón

25

Спробуйте <%#замість <%=на сторінці Master у розділі head

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

Потім на сторінці Код позаду майстра в розділі Page_LoadПодія

Page.Header.DataBind();

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


1
Потрібна Page.Header.DataBind();лінія, щоб вона працювала для мене, дякую!
Brendan Hannemann

Можливо, вам також доведеться додати runat="server"атрибут до headтегу.
Олексій

11

Якщо ви не збираєтеся до нас asp: ScriptManager або абсолютні шляхи, то ви можете зробити це так:

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

3

Я не знаю, знайшли ви, хлопці, рішення своєї проблеми чи ні. Я зіткнувся з тією ж проблемою і збився з розуму, щоб зрозуміти, чому я отримую помилку "jQuery не визначено" на плагінах, які я використовую. Я спробував усі рішення, які я отримую з Інтернету, але зовсім не пощастило.

Але раптом у мене на думці щось сплеснуло, що, можливо, є файлами скриптів, має бути в порядку. Отже, я перемістив jquery referece на перше місце, і все починає працювати як шарм.

Пам'ятайте, хлопці, якщо ви використовуєте будь-які плагіни з 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, але коли ви використовуєте, тоді він якось вимагає належного порядку.

Удачі та щасливого кодування,

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


3

Подивіться, як запустити корінь “/” . Це має вирішити всі ваші проблеми щодо невирішених .jsшляхів до файлів. По суті, ви переналаштовуєте сервер VS Dev для запуску вашого додатка, localhost:port/на відміну від звичайного localhost:port/application name/змушення роздільної здатності імен працювати так само, як і в IIS.


1

Для абсолютного шляху до файлу для будь-якої сторінки використовуйте його наступним чином:

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

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

2
Проблема із шляхами від кореня полягає в тому, що іноді ви можете розробити віртуальний каталог, а потім розгорнути його в кореневій частині сайту, або навпаки.
StuartLC 11.03.12

0

Якщо цей тег сценарію надходить безпосередньо до браузера, то ви навряд чи зможете підставити там корінь свого сайту. Принаймні не на сервері. Отже, ви можете:

  1. Розгорніть сайт у корені доменного імені та використовуйте абсолютні шляхи (найпростіше рішення).
  2. Вставте це посилання з керуванням сервером.
  3. Попередньо обробити отриманий HTML перед надсиланням його клієнту (за допомогою HttpResponse.Filter).

0

Ви також можете використовувати тег <base> HTML:

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

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

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

Часто це корисно, коли у вас є кілька публікацій, наприклад, локальний веб-сервер розробників, демонстраційний сервер тощо. Ви просто замінюєте цю базову URL-адресу.


Як- base hrefпрограмно змінити ?
PreguntonCojoneroCabrón

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.