【问题标题】:ASP MVC 6 AJAX Bad RequestASP MVC 6 AJAX 错误请求
【发布时间】:2017-08-10 15:41:10
【问题描述】:

我的目的是更新数据库,而不是在用户提交数据时完全重新加载用户所在的当前页面,而只是弹出一个消息框,说明成功或失败,或类似的内容。

我有以下 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);
}

如您所见,我有一些变量打算稍后用于实际做某事。但是现在,我只是想让这个 TEST 工作。问题是控制器中的动作甚至不会触发。错误警报给了我“错误请求”。

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

我不知道还能尝试什么。有谁知道怎么回事?

【问题讨论】:

  • 尝试给出完整的网址:“host/Postings/listItemSubmitted”,
  • 尝试删除 [ValidateAntiForgeryToken] 属性 - 您没有将令牌与您的帖子一起发送,因此这将阻止请求工作。

标签: javascript c# ajax asp.net-mvc


【解决方案1】:

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

【讨论】:

  • 如果 OP 在视图中包含了@Html.AntiForgeryToken(),那么var _formData = _form.serialize(); 将包含令牌
  • @StephenMuecke 如果OP将序列化的表单数据发送到服务器,那将是正确的,但这里他们没有这样做,所以我建议删除过滤器。
  • 是的,他们有 - 这就是 var _formData = _form.serialize(); 所做的 :)
  • OP 代码的真正问题是他们应该删除contentType: "application/json; charset=utf-8",(或者对数据进行字符串化),然后方法参数应该是视图中使用的模型,并且所有内容都将正确绑定
  • @StephenMuecke 'formData' 值包含序列化数据,但他们没有在 'ajax' 部分将其发送到服务器。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2021-09-20
相关资源
最近更新 更多