Я загружаю некоторый контент через jQuery.load('/Business/Tags'), который хорошо работает при использовании моего локального веб-сервера. Но при использовании iis это не решает правильно. Я видел пару различных способов обойти это, например ResolveUrl. Каков наилучший способ обработки разрешающих URL-адресов в вашем javascript?
ASP.NET MVC разрешает URL-адреса в javascript
Ответ 1
Я столкнулся с этой точной проблемой с моим JavaScript. Поскольку мой JavaScript был также в отдельном файле, который был включен в мою главную страницу, я не мог использовать ResolveUrl в моем случае.
Вот как я решил это в моем случае. Я включил следующий JavaScript в мой тег заголовка на моей главной странице вверху:
<script type="text/javascript">
var baseUrl = "<%= Request.Url.GetLeftPart(UriPartial.Authority) %>";
</script>
Я устанавливаю глобальную переменную, доступную для всех моих файлов JavaScript, называемых baseUrl.
Тогда ваш код будет выглядеть следующим образом:
jQuery.load(baseUrl + '/Business/Tags');
Ответ 2
Что касается меня, я использую помощники Url.Action/Url.RouteUrl с JavaScript/jQuery, где это возможно:
$.load('<%= Url.Action("Tags", "Business") %>')
или
$.load('<%= Url.RouteUrl("BusinessTagsRoute") %>')
В других случаях я использую помощник ResolveUrl (от MVCContrib, или вы можете написать свой собственный):
$.load('<%= Url.ResolveUrl("~/Business/Tags") %>')
ОБНОВЛЕНО:
Также возможно создать специальный контроллер для JavaScript/jQuery с действиями, возвращая PartialViews с JavaScript:
public ActionResult YourJavaScript()
{
Response.ContentType = "application/x-javascript";
return PartialView("YourJavaScript");
}
Затем в вашем файле YourJavaScript.ascx вы можете использовать код JavaScript/jQuery с тегами сервера WebForms. Я по-прежнему рекомендую не использовать едва закодированные URL-адреса в jQuery/AJAX
Ответ 3
Несколько способов сделать это в наших приложениях:
var applicationPath = '<%= Url.Content("~/") %>';
ИЛИ
var applicationPath = '<%= Request.Url.Scheme %>://<%= Request.Url.Host %><%= Request.ApplicationPath %>/';
Затем мы используем applicationPath как базовый url для всех наших вызовов ajax.
Ответ 4
Я по-прежнему рекомендую использовать базовый тег href на главной странице. поэтому любые образы или вызовы javascript будут устранены из этого URL-адреса. Это позволит вам поместить ваши javascript функции/вызовы во внешний js файл.
<html> <head> <base href="#" onclick="location.href='http://www.mysite.com/virtual_dir1/'; return false;"> <script src="location_of_js_file">
Помните окончание '/' в базовом href.
Кроме того, удалите ведущий "/", и всякий раз, когда вы делаете jQuery.load( "Бизнес/Теги" ), он действительно будет получен из http://www.mysite.com/virtual_dir1/Business/Tags.