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

时间:2016-03-04 05:31:26

标签: javascript jquery asp.net ajax asp.net-mvc

我试图在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();
}

1 个答案:

答案 0 :(得分:2)

您的ajax方法是在服务器上抛出异常,因为您的方法需要ProductCommentViewModel但使用data: $(id).serialize(),的数据不会感知您的模型。您需要更改ajax才能使用

data: $this.serialize(),
dataType: "json",

即。您发送的数据是序列化的表单值,因为您的方法返回json,dataType也必须是'json'