【问题标题】:ASP MVC 4 Ajax.ActionLink for delete using AntiForgeryTokenASP MVC 4 Ajax.ActionLink 使用 AntiForgeryToken 进行删除
【发布时间】:2013-06-06 18:24:41
【问题描述】:

我有许多索引页面,其中行有一个类似这样的操作链接

@Ajax.ActionLink("Delete", "Delete", "AdverseEvent", new { id = Model.AdverseEventId }, new AjaxOptions { HttpMethod = "Post",OnSuccess = "rowDeleted", LoadingElementId="ajaxRequest_processing", Confirm = String.Format("Are you sure you want to delete adverse event for participant {0} at {1} ?", Model.ParticipantId, Model.EventTime) }, new { @class = "deleteAction" })

actionlink 是一种使用渐进增强的好方法,因为当然还有一个 delete 操作,使用 get 和 post 方法对禁用 javascript 的人执行删除操作。

我需要添加一个 AntiForgeryToken。对于 Ajax.BeginForm 助手,Jon White's 代码运行良好:

$.ajaxPrefilter(function (options, localOptions, jqXHR) {
    var type = options.type.toLowerCase();
    if (type === 'post') {
        var token = GetAntiForgeryToken();
        jqXHR.setRequestHeader(token.name, token.value);
    }
});

当它在 actionlink 中执行时,我假设因为索引表没有包装在表单中,我会收到错误消息:

The required anti-forgery form field "__RequestVerificationToken" is not present

所以我可以将整个表包装在一个表单中,然后返回到删除操作,但是如果我想使用其他 ajax.actionlinks 到表中的不同操作,这不是很整洁。我可以以自己的形式包装每个动作链接,每个动作链接都有自己的防伪标记,但这是大量的额外标记,并且会在页面上留下数十个具有相同值和名称的元素。另一种选择是使用 ActionLink OnBegin 方法将按钮包装在表单中,但不显眼的 ajax 库似乎没有传递对导致 ajax get/post 的元素的任何引用(在我看来很愚蠢 - 你可以对此表示赞同问题codeplex)。

对简洁的解决方案有任何想法吗?谢谢。

【问题讨论】:

标签: asp.net-mvc-4 unobtrusive-ajax


【解决方案1】:

您可以将令牌添加到页面中,然后使用 Ajax 在另一个调用中发送该字段。

How to include the @Html.AntiForgeryToken() when deleting an object using a Delete link

【讨论】:

  • 非常感谢 - 我很惊讶我的搜索没有遇到这个!
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
相关资源
最近更新 更多