JavaScript в Виртуальном каталоге, не знающем о Виртуальном каталоге

Скажите, что у меня есть сайт, http://localhost/virtual, где виртуальный является виртуальным каталогом

У меня есть запрос Ajax, который определяется в файле JavaScript с помощью JQuery

$.getJSON("/Controller/Action")

Когда это называют, клиент пытается найти URL на корневом уровне т.е. http://localhost/Controller/Action

Если я добавляю тильду (~) символ в, это превращается в http://localhost/virtual/~/Controller/Action

Это должно (если бы это должно было сделать то, что я хотел), решают на http://localhost/virtual/Controller/Action

Какие-либо идеи о том, как зафиксировать это?

20
задан Dann 30 June 2010 в 11:38
поделиться

4 ответа

Может быть, $. Getjson ("Контроллер / действие") будет делать?

2
ответ дан 29 November 2019 в 23:27
поделиться

Относительный путь к файлу JS был единственным решением, которое я нашел $ .getjson (".. Контроллер / действие")

0
ответ дан 29 November 2019 в 23:27
поделиться

Ярлыки Tilde для вашего корневого пути к приложению является особенностью ASP.NET, а не часть самих URL. Следовательно, пытаясь использовать URL-адрес с помощью Tilde в JavaScript, не разрешит корень сайта, он просто даст вам буквальный ~ , как вы можете видеть.

Вам нужно будет пройти значение корневого пути приложения к JavaScript, чтобы он мог построить сам URL. Я не так знаком с ASP.NET, но я верю, что вы можете сделать что-то вроде:

<script type="text/javscript">
    var approot= <%= JavaScriptSerializer.Serialize(Request.ApplicationPath) %>;
    ... $.getJSON(approot+'/Controller/Action') ...;
</script>

более простой способ сделать это, если вы знаете, что есть ссылка на странице к утверждению, будет читать HREF Из этой ссылки:

var approot= $('#homepagelink').attr('href');
2
ответ дан 29 November 2019 в 23:27
поделиться

Я успешно использовал это решение

Поместите следующий элемент на вашу главную страницу

<%= Html.Hidden("HiddenCurrentUrl", Url.Action("Dummy"))%>

Объявите глобальную переменную в вашем основном файле javascript

var baseUrl = "";

Установите для baseUrl значение «HiddenCurrentUrl», когда ваш javascript загружен

baseUrl = $("#HiddenCurrentUrl").val();
baseUrl = baseUrl.substring(0, baseUrl.indexOf("Dummy"));

Используйте baseUrl

$.getJSON(baseUrl + "Action")

EDIT Улучшенное решение

В вашем контроллере

ViewBag.BaseUrl = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath + "/";

На главной странице

<script type="text/javascript">
    var YourNameSpace = YourNameSpace || {};
    YourNameSpace.config = {
        baseUrl: "@ViewBag.BaseUrl"
    }
</script> 

Используйте свой baseUrl

$.getJSON(YourNameSpace.config.baseUrl + "Action")
15
ответ дан 29 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: