Asp.net mvc Action()导致所需的防伪表单字段__RequestVerificationToken“;不存在例外

Asp.net mvc Action()导致所需的防伪表单字段__RequestVerificationToken“;不存在例外,asp.net-mvc,braintree,antiforgerytoken,Asp.net Mvc,Braintree,Antiforgerytoken,在同一页中,我有两张表格。一个是简单的时事通讯订阅,另一个是Braintree“Drop-in”支付表单 当我提交Braintree表单时,在表单提交后,我得到一个所需的防伪表单字段“\uu RequestVerificationToken”不存在异常,在重新加载页面时,相对于新闻稿表单 这真的很奇怪,考虑到时事通讯表单工作得很好,我看不出为什么一个表单的提交会在另一个表单中产生这样的异常,特别是当重新加载页面而不是在发布时 这是通讯表单的代码,包含在部分视图中: @using (Ajax.Be

在同一页中,我有两张表格。一个是简单的时事通讯订阅,另一个是Braintree“Drop-in”支付表单

当我提交Braintree表单时,在表单提交后,我得到一个
所需的防伪表单字段“\uu RequestVerificationToken”不存在
异常,在重新加载页面时,相对于新闻稿表单

这真的很奇怪,考虑到时事通讯表单工作得很好,我看不出为什么一个表单的提交会在另一个表单中产生这样的异常,特别是当重新加载页面而不是在发布时

这是通讯表单的代码,包含在部分视图中:

@using (Ajax.BeginForm("SubscribeForm", "Components"))
{
    @Html.AntiForgeryToken()
    // other inputs omitted for brevity
}
我使用
@Html.Action(“SubscribeForm”、“Components”)
在页脚中呈现它。这是ComponentController,具有GET和POST操作:

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

 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult SubscribeForm(SubscribeViewModel model)
 {
     // do stuff
 }
这是个例外:


你知道什么会触发这种行为吗?

你必须发布你的表单,其中有验证令牌。为此,考虑使用提交按钮/输入标签。

@using (Ajax.BeginForm("SubscribeForm", "Components")) {
@Html.AntiForgeryToken()
<input type="submit" value="Log in" class="btn btn-default" /> }
使用(Ajax.BeginForm(“subscribebform”、“Components”)){ @Html.AntiForgeryToken() }
@Html.Action()
不生成链接-它调用服务器方法并呈现其结果。问题与提交按钮无关。这可能与以下事实有关:
@Html.Action()
将调用POST方法,而不是GET方法(如果当前请求是POST)。您能真实地显示控制器方法(包括属性)的签名吗?我不知道。我更新了我的问题,添加了处理“SubscribeForm”操作的ComponentController的代码。好的,您可以通过将POST方法更改为说
PublicActionResult Subscribe(SubscribeViewModel model)
并使用(Ajax.BeginForm(“Subscribe”,“Components”)将表单调整为
@来测试这一点吗
匹配。天哪,你说得对。。。真是太棒了。因为POST和GET操作具有相同的名称,所以本例中的Html.Action调用了POST。我想它总是需要得到。。。非常感谢。通常使用相同的名称是很好的(而且更可取),但使用
@Html.Action()