我的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方法的值将是空字符串。
答案 0 :(得分:1)
您的控制器包含ValidateAntiForgeryToken
属性。由于您没有通过ajax请求传递防伪令牌,因此您收到错误消息。
如果您检查自己的回复正文,则可能会看到错误。
所以你有两个选择
ValidateAntiForgeryToken
属性ValidateAntiForgeryToken
并将令牌与您的ID一起传递<强>更新强>
使用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 }
})
希望这有帮助!