0

少なくとも私にとっては、私は奇妙な行動を経験しています。明らかに異なる署名を持つコントローラー内に 2 つのメソッドを記述しました。

[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 に答える