2017-08-10 70 views
0

我的意图是更新数据库,而不是完全重新加载当用户提交数据时用户所在的当前页面,而不是弹出消息框表示成功或失败,或类似的东西。ASP MVC 6 AJAX错误请求

我有以下JS功能,当用户单击按钮时调用。

function saveListItem(formID) 
{ 
    alert('JS function fired.'); 
    var _form = $('#mainForm' + formID) 
    var _formData = _form.serialize(); 

    $.ajax({ 
     dataType: "json", 
     type: "POST", 
     url: "/Postings/listItemSubmitted", 
     contentType: "application/json; charset=utf-8", 
     data: { type: "test" }, 
     success: function() { 
      alert("success"); 
     }, 
     error: function (xhr, status, error) 
     { 
      alert(error.toString()); 
     } 
    }); 
} 

这里是控制器动作:

[HttpPost] 
[ValidateAntiForgeryToken] 
public JsonResult listItemSubmitted([FromBody] string type) 
{ 
    type += "!!!"; 
    return Json(type); 
} 

正如你所看到的,我有几个变数,后来我打算用实际做一些事情。但现在,我只是试图让这个测试工作。问题在于控制器中的动作甚至不会触发。错误警报提供给我“错误的请求”。

我检查过名字,所有的名字都是正确的(控制器是PostingsController.cs,方法名是listItemSubmitted)。我已经尝试了URL语法前后各个斜线的组合。我甚至尝试过使用@ Url.Action方法,它给了我那个字符串,所以我知道它是正确的。

我不知道还有什么可以尝试的。有谁知道发生了什么事?

+0

试图给整个网址:“HTTP://主机/职位/ listItemSubmitted”, – volkinc

+2

尝试删除[ValidateAntiForgeryToken]属性 - 你是不是与你的讯息发送令牌,以便这将防止从工作的要求。 –

回答

0

我认为您在控制器中使用ValidateAntiForgeryToken作为过滤器存在问题。您必须将相关输入值与您的数据一起发送到服务器。尝试删除此过滤器。

+0

如果OP在视图中包含了@ Html.AntiForgeryToken(),那么var _formData = _form.serialize();将包含标记 –

+0

@StephenMuecke如果OP将序列化表单数据发送给服务器,但在这里他们没有这样做,所以我建议删除过滤器。 –

+0

是的,他们有 - 这是什么'var _formData = _form.serialize();':) :) –