我有一个MVC 5 Web应用程序,正在使用AJAX Post调用Controller Actions。假设我有一个名为“ Account”的控制器和对该控制器上名为“ Create”的操作。
要调用该操作,我一直在使用类似的代码,该代码是通过访问“帐户/索引GET”操作从“帐户/索引”视图调用的。
$.ajax({
type: "POST",
url: "/Create",
data: dataVar,
processData: false,
contentType: false,
datatype: "json",
success: function (data) {
$('#result').html(data);
}
});
这不是我的确切代码,但这表明我的目的。我一直在使用“ / Create”作为POST网址。这一直很好,没有问题,直到今天看起来似乎是随机的,它不再能够找到操作方法。我使用@ Url.Action生成了正确的URL来解决此问题,这很好,但是我想知道是否确实需要这样做。 (下面的伪代码)
$.ajax({
type: "POST",
url: "@Url.Action("Create","Account")",
data: dataVar,
processData: false,
contentType: false,
datatype: "json",
success: function (data) {
$('#result').html(data);
}
});
发布网址与当前控制器相关时,以前的方式有问题吗?我应该避免这种情况,并且始终使用函数来生成我的网址吗?
我特别好奇为什么“ / Create”以前可以运行,但是现在突然必须被称为“ / Account / Create”。有什么想法吗?是否在web.config中进行设置?
答案 0 :(得分:0)
经过进一步研究,似乎当我使用缩短的URL执行我的代码时,这只是it幸。输入AJAX调用网址的正确方法是使用完整的相对路径或Razor帮助器功能,例如:
$.ajax({
type: "POST",
url: "@Url.Action("Create","Account")",
data: dataVar,
processData: false,
contentType: false,
datatype: "json",
success: function (data) {
$('#result').html(data);
}
});
如果使用Url.Action方法并且您的JavaScript不在视图页面上,则必须通过视图页面将url传递给您的javascript。