如何使用Ajax和jquery将我的对象id传递给我的action方法

时间:2014-07-24 13:27:03

标签: jquery asp.net-mvc asp.net-mvc-5

我的asp.net mvc视图中有以下字段: -

@foreach (var item in Model) {
    @Html.CheckBoxFor(model => item.CheckBoxSelection, new { @value = item.TMSServerID.ToString() })
}

并且我编写了以下jquery来选择CheckBox的值(如果选中): -

$('body').on("click", "#transferSelectedServers", function () {
    var boxData = [];
    $("input[name='CheckBoxSelection']:checked").each(function () {
        boxData.push($(this).val());
    });

    $.ajax({
        type: "POST",
        url: "@Url.Content("~/Server/DeleteSelected")",
        data: { ids: boxData.join(",") }
    })
});

我有以下Action方法: -

[HttpPost]
[ValidateAntiForgeryToken]
public string DeleteSelected(string ids)

但是目前传递给我的action方法的值将是空字符串。

1 个答案:

答案 0 :(得分:1)

您的控制器包含ValidateAntiForgeryToken属性。由于您没有通过ajax请求传递防伪令牌,因此您收到错误消息。

如果您检查自己的回复正文,则可能会看到错误。

所以你有两个选择

  1. 删除ValidateAntiForgeryToken属性
  2. 保留ValidateAntiForgeryToken并将令牌与您的ID一起传递
  3. <强>更新

    使用Ajax发送AntiForgeryToken

    通过添加以下内容在您的视图中渲染antiforgerytoken

    @Html.AntiForgeryToken()
    

    这将生成一个像这样的隐藏字段......

    <input type="hidden" value="SSjplL_6t1bxDmb8qTdHcqX5ScafLxw4kmFMzc1dJ7T4kuXfL3aiDWIrwEjk9JKsUV4TGUsENKbRTRJ0W2zYLeHjmtCg02TZQBDevWeRYEA1" name="__RequestVerificationToken">
    

    您需要做的就是使用__RequestVerificationToken作为对象名称来传递该值。

    所以你的ajax调用现在看起来像这样......

      var token = $("input[name='__RequestVerificationToken']").val();
    
      $.ajax({
            type: "POST",
            url: "@Url.Content("~/Server/DeleteSelected")",
            data: { ids: boxData.join(","), __RequestVerificationToken: token }
        })
    

    希望这有帮助!