ASP.NET MVC разрешить URL-адреса в JavaScript - PullRequest
16 голосов
/ 29 мая 2009

Я загружаю некоторый контент через jQuery.load ('/ Business / Tags'), который хорошо работает при использовании моего локального веб-сервера. Но при использовании iis это не решается правильно. Я видел несколько разных способов обойти это, таких как ResolveUrl. Каков наилучший способ обработки разрешающих URL в вашем javascript?

Ответы [ 4 ]

18 голосов
/ 29 мая 2009

Я столкнулся с этой проблемой с моим JavaScript. Поскольку мой JavaScript был также в отдельном файле, который был включен в мою мастер-страницу, я не мог использовать ResolveUrl в моем случае.

Вот как я решил это в моем случае. Я включил следующий JavaScript-код в свой тег head на своей главной странице вверху:

<script type="text/javascript">
    var baseUrl = "<%= Request.Url.GetLeftPart(UriPartial.Authority) %>";
</script>

Я устанавливаю глобальную переменную, которая доступна для всех моих файлов JavaScript, которая называется baseUrl.

Ваш код станет:

jQuery.load(baseUrl + '/Business/Tags');
5 голосов
/ 29 мая 2009

Что касается меня, я использую помощники 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

2 голосов
/ 29 мая 2009

Несколько способов сделать это в наших приложениях:

 var applicationPath = '<%= Url.Content("~/") %>';

OR

 var applicationPath = '<%= Request.Url.Scheme %>://<%= Request.Url.Host %><%= Request.ApplicationPath %>/';

Затем мы используем applicationPath в качестве базового URL для всех наших вызовов ajax.

1 голос
/ 29 мая 2009

Я все еще рекомендую использовать тег href на вашей главной странице. поэтому любые изображения или вызовы javascript разрешаются с этого URL. Это позволит вам поместить ваши функции / вызовы javascript во внешний js-файл.

<html>
    <head>
        <base href="http://www.mysite.com/virtual_dir1/">
        <script src="location_of_js_file">

Запомните окончание '/' в базовом href.

Кроме того, удалите ведущий '/', и всякий раз, когда вы выполняете jQuery.load ('Business / Tags'), он на самом деле приходит из http://www.mysite.com/virtual_dir1/Business/Tags.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...