在MVC 5中使用相对URL进行AJAX发布

时间:2018-09-22 02:38:46

标签: javascript jquery ajax asp.net-mvc

我有一个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中进行设置?

1 个答案:

答案 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。