7

我有一个从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 文件中,我尝试调用与我的主页视图中相同的函数,如上面的那个。但是,由于我现在用完了QUNIT控制器,所以 url 被解析为http://localhost/myappname/qunit/Home/GetNavigationTreePV.

我尝试将我的 ajax 请求的 url 更改为/Home/GetNavigationTreePV/(使用前面的正斜杠),但是当我这样做时,我得到以下 url http://localhost/myappname/Home/GetNavigationTreePV

因此,需要明确的是,我试图以始终从 MVC 应用程序的根目录开始的方式编写我的 ajax 请求,然后附加我的 $.ajax() 函数中给出的 url 参数。

有没有简单的方法可以做到这一点?我会以一种奇怪的方式解决这个问题吗?

4

2 回答 2

11

我认为在您的 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")')

于 2011-10-10T14:21:15.240 回答
10

我能够使用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;
}
于 2011-10-17T16:18:31.447 回答