Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ajax和jquery将对象ID传递给操作方法_Jquery_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

如何使用Ajax和jquery将对象ID传递给操作方法

如何使用Ajax和jquery将对象ID传递给操作方法,jquery,asp.net-mvc,asp.net-mvc-5,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来选择复选框的值(如果选中):- $('body').on("click", "#transferSelectedServers", function

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

@foreach (var item in Model) {
    @Html.CheckBoxFor(model => item.CheckBoxSelection, new { @value = item.TMSServerID.ToString() })
}
我编写了以下jquery来选择复选框的值(如果选中):-

$('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(",") }
    })
});
我有以下的行动方法:-

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

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

您的控制器包含
ValidateAntiForgeryToken
属性。因为您没有在ajax请求中传递antiforgery令牌,所以您收到了一个错误

如果您检查您的响应主体,您可能会看到错误

所以你有两个选择

  • 删除
    ValidateAntiForgeryToken
    属性
  • 保留
    ValidateAntiForgeryToken
    并将令牌与您的ID一起传递
  • 更新

    使用Ajax发送AntiForgeryToken

    通过添加以下内容在视图中呈现antiforgerytoken

    @Html.AntiForgeryToken()
    
    这将生成一个像这样的隐藏字段

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

    希望这有帮助

    首先检查boxData数组的长度,然后再将其传递给ajax。可能是数组有问题且长度为零不确定是否不填充数组,但传递数组并将操作方法参数设置为
    public string DeleteSelected(int[]ids)不是更容易吗{..
    ?-注意,您需要在ajax选项中设置
    traditional:true
    ,您是对的,这是导致问题的原因,但是有没有办法使用jquery传递反伪造令牌?
      var token = $("input[name='__RequestVerificationToken']").val();
    
      $.ajax({
            type: "POST",
            url: "@Url.Content("~/Server/DeleteSelected")",
            data: { ids: boxData.join(","), __RequestVerificationToken: token }
        })