0

至少对我来说,我正在经历一种奇怪的行为。我在具有明显不同签名的控制器中编写了两种方法:

[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,则代码可以正常工作,但我想了解它为什么不能正常工作。

4

1 回答 1

1

这是因为 BeginForm 在内部使用GetVirtualPath从路由表中获取 url。在您的示例中,第一个链接被添加到路由表中。

只需使用以下内容编辑 POST 方法即可:

[HttpPost]
[ValidateAntiForgeryToken]
[Route("Add")]
public async Task<ActionResult> Add(AddTransactionViewModel model)
于 2016-11-20T18:01:36.593 回答