我经历了一种奇怪的行为,至少对我而言。我在控制器中编写了两种方法,这些方法具有明显不同的签名:
[Route("~/Wallets/{walletId}/Transactions/Add")]
public async Task<ActionResult> Add(long walletId)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Add(AddTransactionViewModel model)
每当我尝试使用Ajax.BeginForm调用POST方法时,就会调用GET方法(第一个)。
@using (Ajax.BeginForm("Add", "Transactions",
new AjaxOptions() { HttpMethod = "POST" })
{
...
}
现在,为什么会这样?当然,如果我将GET方法的名称更改为AddTransaction,则代码可以正常工作,但我想理解为什么它不是原样。
答案 0 :(得分:1)
这是因为BeginForm在内部使用GetVirtualPath来获取路由表中的url。第一个链接将添加到示例中的路由表中。
使用以下命令编辑POST方法应该可以解决问题:
[HttpPost]
[ValidateAntiForgeryToken]
[Route("Add")]
public async Task<ActionResult> Add(AddTransactionViewModel model)