服务器仅在调用表单提交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(); 
} 
+0

没有'e.preventDefault(); ',表单将被提交。服务器端脚本导致问题.. – Rayon

+0

@RayonDabre所以你在说什么,我该怎么办?作为一个测试,我只是试图返回5000作为数据。 –

+0

检查有效数据是否通过服务器发送。如果是,那么检查你的控制器代码...'asp.net'不是我的一杯茶.. – Rayon

您的AJAX方法是在服务器上抛出一个异常,因为你的方法需要的数据是ProductCommentViewModel但使用data: $(id).serialize(),不是发觉你的模型。您需要更改的AJAX使用

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

即你发送的数据序列化形式的价值观和因为YOUT方法返回的JSON,在dataType也必须'json'

+0

谢谢!使用$ this.serialize()完美工作,但不知道为什么使用ID不起作用,似乎应该有。它仍然返回5000没有dataType设置为json,但我会让它json,因为我返回json。 –

+0

由于'ID'不是'ProductCommentViewModel',并且你的方法刚刚初始化了一个'ProductCommentViewModel'的新实例,所以'FeedPostId = vm.ProductComment.FeedPostId',因为'ProductComment'是'null',所以'抛出'NullReferenceException'学习调试你的代码) –

+0

把我扔掉的事情是,当e.preventDefault不存在时,我的视图模型被正确绑定......并且即使在使用ID时也能正常工作..你能解释一下吗?我正在调试。 –