MVC ajax调用控制器方法

时间:2013-05-22 19:43:20

标签: jquery ajax asp.net-mvc

我正在尝试使用ajax来调用控制器方法,并且我收到内部服务器错误。

jquery看起来像这样:

function user(id) {
    alert(id+" "+$("#comment").val());
    var param = {
        userId : id,
        comments : $("#comment").val()
    };

    $.ajax({
        url: "/Admin/User",
        contentType: "application/x-www-form-urlencoded",
        type: "POST",
        datatype: "json",
        data: param,
        error: function (xmlHttpRequest, errorText, thrownError) {
            alert(xmlHttpRequest+"|"+errorText+"|"+thrownError);
        },
        success: function (data) {
            if (data != null) {
                alert("success");
            }
        }
    }); 
}

控制器如下所示:

[HttpPost]
    public ActionResult User(int id, string comment)
    {

        var user = UserModel.GetPerson(id);

        user.IsDeleted = true;

        UserModel.UpdatePerson(user);

        return RedirectToAction("ManageUsers");
    }

看起来代码甚至没有进入控制器。正在触发user(id)中的第一个警报。有没有人看到这里发生了什么?

3 个答案:

答案 0 :(得分:3)

您的对象属性与操作的参数冲突

对象属性

{
   userId : id,
   comments : $("#comment").val()
}

<强> VS。行动参数

 int id, string comment

尝试更改它们以匹配,例如:

public ActionResult User(int userId, string comments) { ... }

请注意,您无法从异步请求重定向到操作。它有点挫败了目的。您需要重定向回调。

答案 1 :(得分:1)

根据Gabe的回答,我认为你会发现你无法从ajax请求重定向到行动。在您的成功回调中,您需要将document.location设置为您希望重定向的操作的URL。目前,重定向到操作是由mvc返回,但不是由浏览器返回。

<强>回调

success: function (data) {
    document.location = data.responseText;
}

控制器返回

return Url.Action("ManageUsers", "Users").ToString();

答案 2 :(得分:0)

这不是这个问题的确切答案,我知道这一点,但是当我试图通过AJAX调用调用控制器方法时,发生了这样的情况。我检查了控制器方法,我意识到我没有在[AllowAnonymous]之后放[HttpPost]。显然,在我的应用程序中需要它,因为登录用户和匿名用户有不同的情况。缺少这个关键字导致AJAX没有达到控制器方法,也许有人试图做同样的事情并看到这个答案。