0

我正在尝试使用 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)正在触发第一个警报。有人看到这里发生了什么吗?

4

3 回答 3

3

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

对象属性

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

与行动论据

 int id, string comment

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

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

请注意,您将无法从异步请求重定向到操作。这有点违背了目的。您需要重定向回调。

于 2013-05-22T19:46:34.313 回答
1

继 Gabe 的回答之后,我想您会发现您无法从 ajax 请求重定向到操作。在您的成功回调中,您还需要将 document.location 设置为您希望重定向的操作的 url。目前,重定向到操作由 m​​vc 返回,但不会返回到您的浏览器。

打回来

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

控制器返回

return Url.Action("ManageUsers", "Users").ToString();
于 2013-05-22T19:54:10.327 回答
0

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

于 2015-04-30T12:32:08.843 回答