Подтвердить что ты не робот

ASP.NET MVC разрешает URL-адреса в javascript

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

4b9b3361

Ответ 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.