我正在尝试使用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)
中的第一个警报。有没有人看到这里发生了什么?
答案 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没有达到控制器方法,也许有人试图做同样的事情并看到这个答案。