2012-06-28 1 views
1

У меня есть локальный хост с несколькими проектами, поэтому этот проект в свойствах VS2010-> веб-> использует локальный веб-сервер IIS = 'localhost/project4 /'. (Я не могу использовать обычный отладчик VS Development Server, так как некоторые компоненты не будут работать в моем проекте) Во всяком случае, localhost в порядке не имеет большого значения, поэтому я продолжаю кодирование.JQuery ajax .load() для ссылки на правильный URL-адрес

Теперь, в ajax, когда я вызываю .load ('/ Account/LogOn'); он дает мне «localhost/Account/LogOn», но я действительно хочу «localhost/project4/Account/LogOn», потому что он сидит в каталоге project4, а не в корне.

Любая идея, как сказать ajax Мне нужен этот префикс виртуального каталога между именем домена и остальным URL-адресом?

EDIT --------------------------------------------

спасибо, ребята, в сочетании со всеми своими знаниями, я предполагаю, что лучшие способы сделать это являются:

  1. Включите JS скрипт в .cshtml стороне сервера и использовать «~/Account/LogOn /» пусть. net выяснить путь.

  2. Сделать глобальный var remove_me_debug_only_virtual_directory = "/ project4 /"; в js-коде. добавьте его к доменному имени. таким образом нам не нужно тянуть .net в воду и писать js-код в .cshtml.

  3. Переместите проект в localhost/root, если это возможно, в этом случае я не могу, потому что другие люди на работе хотят получить доступ к этому сетевому серверу и сделать демо.

+1

Вы пробовали '.load ('Account/LogOn');' (без предшествующих '/')? –

+2

Или '~/Account/LogOn' –

+0

@J Стин, я думаю, что tilda работает только на стороне сервера, как @ Url.Content (" ~/Account/LogOn ") в .cshtml или .aspx? Кажется, не работает в js-файле? В итоге у меня будет «localhost/~/Account/LogOn», а .load() не будет анализировать его для меня? – Tom

ответ

1

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

  1. Проверьте контекст вашего сервера, если корень «/» затем вам нужно называть что-то вроде:

    .load ('/ project4/Account/LogOn');

  2. Если ваше приложение является корневым, и вы можете звонить этот запрос от себя, то

    .load («Счет/LogOn»);

+0

Я думал о жестком кодировании '/ project4 /' в скрипте, но разве он не является немного вредным и взломанным, когда я пытаюсь развернуть проект в реальном домене или повторно использовать код в будущем? – Tom

+0

Я использую java для использования request.getConextPath для разрешения таких конфликтов. У вас должно быть что-то подобное в .net также –

2

Согласно .net документам,

Абсолютные и относительные ссылки путь в элементе управления сервера имеют следующие недостатки:

Абсолютные пути не являются переносимыми между приложениями. Если вы переместите приложение, на которое указывает абсолютный путь, ссылки будут разбиты.

Относительные пути в стиле клиентских элементов могут быть трудно поддерживать, если вы перемещаете ресурсы или страницы в разные папки.

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

Так, как описано выше, с использованием ~ приведет вас к корню вашего веб-проекта с помощью жерех:

<asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" /> 

Для получения дополнительной информации перейдите по ссылке: Web Project Paths

На основе вашего обновления : Возможный дубликат: base url using jQuery

Где указано @gregguida:

var l = window.location; 
    var base_url = l.protocol + "//" + l.host + "/" + l.pathname.split('/')[1]; 

    //all you need to do is work with l.pathname.split('/') to find what you need. 
+0

hmmm, как я уже упоминал выше, Razor @ Url.Content («~/Account/LogOn») или WebForm , это код на стороне сервера. Я говорю о js code ajax .load() ... – Tom

+0

Вы говорите. .load() не выполняет ваш код asp перед загрузкой? потому что load() считывает содержимое с сервера, а затем возвращает соответствующий html. –

+0

Извините, мой плохой, я немного изменил название. Я имею в виду функцию .load() в js JQuery one. Не на стороне сервера. – Tom

3

Если код JS находится в файле cshtml MVC, использовать его как это:

.load('@Url.Action("LogOn", "Account")'); 

Правильный URL будет помещен в бетонном код JS.

Смежные вопросы