我有一个从 http://localhost/myappname
运行的 ASP.NET MVC Web 应用程序。在 jQuery 中,我进行 jQuery $.ajax() 调用以根据某些用户操作返回部分 View 。我通常从包含我通过 Ajax 调用的函数的同一 Controller 中的 View 调用此函数。例如,我的 Home Controller 中的 View 具有以下功能(效果很好):
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
并正确返回部分 View 。
现在,我尝试使用 qUint 对我的函数进行单元测试。在此测试用例中,我只想验证是否已到达函数末尾并返回 true。我创建了一个 QUNIT Controller 和相应的 View (它加载我的单元测试 JavaScript 文件)。从包含单元测试的 test.js 文件中,我尝试调用主视图中的相同函数,如上面的函数。但是,由于我现在用完了 QUNIT Controller ,因此 URL 被解析为 http://localhost/myappname/qunit/Home/GetNavigationTreePV。
我尝试将我的ajax请求的url更改为/Home/GetNavigationTreePV/
(带有前面的正斜杠),但是当我这样做时,我得到以下urlhttp://localhost/myappname/Home/GetNavigationTreePV
.
所以,要明确的是,我试图以一种始终从 MVC 应用程序的根开始的方式编写我的 ajax 请求,然后附加 $.ajax() 函数中给定的 url 参数。
有没有简单的方法可以做到这一点?我是否以一种奇怪的方式处理这个问题?
最佳答案
我认为在您的 MVC View 页面中您需要 @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")')
关于jQuery Ajax : Reference MVC controller url from App root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713859/