服务器仅在调用表单提交preventDefault时返回500错误
我想在不重定向的情况下在ASP.NET MVC表单上做一个简单的AJAX文章,并且服务器不断返回500错误。当我删除preventDefault一切正常,但页面更改,我看到5000输出到它。服务器仅在调用表单提交preventDefault时返回500错误
AJAX请求:
$(".commentForm").submit(function(e) {
// Without this it works fine, but it is needed so we don't leave page
e.preventDefault();
var $this = $(this);
var id = $this.attr("id");
$.ajax({
type: "POST",
url: "/Products/CreateComment",
data: $(id).serialize(),
dataType: "html",
success: function (data) {
alert(data);
}
});
});
ASP.NET MVC6控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult CreateComment(ProductCommentViewModel vm)
{
if (ModelState.IsValid)
{
ProductComment prodComment = new ProductComment()
{
FeedPostId = vm.ProductComment.FeedPostId,
Content = vm.ProductComment.Content
};
return Json(5000);
}
return HttpBadRequest();
}
您的AJAX方法是在服务器上抛出一个异常,因为你的方法需要的数据是ProductCommentViewModel
但使用data: $(id).serialize(),
不是发觉你的模型。您需要更改的AJAX使用
data: $this.serialize(),
dataType: "json",
即你发送的数据序列化形式的价值观和因为YOUT方法返回的JSON,在dataType
也必须'json'
谢谢!使用$ this.serialize()完美工作,但不知道为什么使用ID不起作用,似乎应该有。它仍然返回5000没有dataType设置为json,但我会让它json,因为我返回json。 –
由于'ID'不是'ProductCommentViewModel',并且你的方法刚刚初始化了一个'ProductCommentViewModel'的新实例,所以'FeedPostId = vm.ProductComment.FeedPostId',因为'ProductComment'是'null',所以'抛出'NullReferenceException'学习调试你的代码) –
把我扔掉的事情是,当e.preventDefault不存在时,我的视图模型被正确绑定......并且即使在使用ID时也能正常工作..你能解释一下吗?我正在调试。 –
没有'e.preventDefault(); ',表单将被提交。服务器端脚本导致问题.. – Rayon
@RayonDabre所以你在说什么,我该怎么办?作为一个测试,我只是试图返回5000作为数据。 –
检查有效数据是否通过服务器发送。如果是,那么检查你的控制器代码...'asp.net'不是我的一杯茶.. – Rayon