服务器仅在表单提交时调用 preventDefault 时返回 500 错误

Server returning 500 error only when calling preventDefault on form submit

本文关键字:返回 错误 preventDefault 调用 表单提交 服务器      更新时间:2023-09-26

我正在尝试在不重定向的情况下在 ASP.NET MVC 表单上做一个简单的 AJAX 帖子,并且服务器不断返回 500 错误。当我删除 preventDefault 时,一切正常,但页面发生了变化,我看到 5000 个输出到它。

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'