Html.Action()导致所需的防伪表单字段“__RequestVerificationToken”不存在异常

时间:2016-12-01 20:38:20

标签: asp.net-mvc braintree antiforgerytoken

在同一页面中,我有2个表格。一个是简单的新闻订阅,另一个是Braintree“Drop-in”付款表单。

当我提交Braintree表单时,表单提交后,我会在重新加载页面时收到The required anti-forgery form field "__RequestVerificationToken" is not present例外,相对于简报表单。

这真的很奇怪,考虑到简报形式完美无缺,我认为没有理由提交一个表单应该在另一个表单中生成这样的异常,特别是在重新加载页面而不是POST时。

这是新闻稿表格的代码,包含在PartialView中:

@using (Ajax.BeginForm("SubscribeForm", "Components"))
{
    @Html.AntiForgeryToken()
    // other inputs omitted for brevity
}

我使用@Html.Action("SubscribeForm", "Components")在页脚中渲染它。这是ComponentsController,带有GET和POST操作:

 public ActionResult SubscribeForm()
 {
     // do stuff
     return PartialView("_SubscribeForm", viewModel);
 }

 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult SubscribeForm(SubscribeViewModel model)
 {
     // do stuff
 }

这是例外:

enter image description here

知道什么可能触发这种行为吗?

1 个答案:

答案 0 :(得分:-3)

您必须发布包含验证令牌的表单。为此,请考虑使用提交按钮/输入标记。

@using (Ajax.BeginForm("SubscribeForm", "Components")) {
@Html.AntiForgeryToken()
<input type="submit" value="Log in" class="btn btn-default" /> }