JQuery Ajax: Ссылка URL контроллера MVC из корня приложения - PullRequest
7 голосов
/ 10 октября 2011

У меня есть веб-приложение ASP.NET MVC, работающее с http://localhost/myappname.Из jQuery я делаю вызовы jQuery $ .ajax () для возврата частичных представлений, основанных на некоторых действиях пользователя.Я обычно вызываю это из представления того же контроллера, который содержит функцию, которую я вызываю через Ajax.Например, представление в моем контроллере Home имеет следующую функцию (которая работает хорошо):

function loadMyPartialView() {
    $.ajax({
      type: 'GET',
      url: 'Home/GetNavigationTreePV/',
      success: function (data) { onSuccess(data); },
      error: function (errorData) { onError(errorData); }
    });
    return true;
}

Этот приведенный выше URL-адрес разрешается в http://localhost/myappname/Home/GetNavigationTreePV, а частичное представление возвращается правильно.

Теперь я пытаюсь использовать qUint для модульного тестирования моих функций.В этом тестовом примере я просто хочу убедиться, что я дошел до конца функции и вернул true.Я создал QUNIT контроллер и соответствующее представление (которое загружает мой файл JavaScript тестового модуля).Из файла test.js, в котором содержатся мои модульные тесты, я пытаюсь вызывать те же функции, что и в моих представлениях Home, как показано выше.Но, поскольку у меня сейчас не хватает контроллера QUNIT, URL-адрес разрешается до http://localhost/myappname/qunit/Home/GetNavigationTreePV.

Я попытался изменить URL-адрес моего запроса ajax на /Home/GetNavigationTreePV/ (с предыдущей косой чертой), но когда я это делаю, я получаю следующий URL http://localhost/myappname/Home/GetNavigationTreePV.

Итак, чтобы было ясно, я пытаюсь написать свой ajax-запрос так, чтобы он всегда начинался с корня моего приложения MVC, а затем добавьте параметр url, указанный в моей функции $ .ajax ().

Есть ли простой способ сделать это?Я собираюсь сделать это странным образом?

Ответы [ 2 ]

10 голосов
/ 17 октября 2011

Мне удалось сделать это с помощью простого JavaScript, используя window.location.pathname. Смотрите следующий пример:

function loadMyPartialView() {
    $.ajax({
      type: 'GET',
      url: window.location.pathname + 'Home/GetNavigationTreePV/',
      success: function (data) { onSuccess(data); },
      error: function (errorData) { onError(errorData); }
    });
    return true;
}
10 голосов
/ 10 октября 2011

Я думаю, что на вашей странице просмотра MVC вам нужно @Url.Action

   function loadMyPartialView() {
        $.ajax({
          type: 'GET',
          url: '@Url.Action("GetNavigationTreePV", "Home")',
          success: function (data) { onSuccess(data); },
          error: function (errorData) { onError(errorData); }
        });
        return true;
    }

В качестве альтернативы вы можете использовать @Url.Content

   function loadMyPartialView() {
        $.ajax({
          type: 'GET',
          url: '@Url.Content("~/home/GetNavigationTreePV")',
          success: function (data) { onSuccess(data); },
          error: function (errorData) { onError(errorData); }
        });
        return true;
    }

Если это файл .js, вы можете передать URL-адрес как

loadMyPartialView ('@ Url.Action ("GetNavigationTreePV", "Home")')

...