2016-11-20 15 views
0

少なくとも私にとっては奇妙な動作が発生しています。私は明らかに異なるシグネチャでコントローラ内の2つの方法が書かれた:異なるHttpMethodを使用するあいまいなアクションメソッド

[Route("~/Wallets/{walletId}/Transactions/Add")] 
public async Task<ActionResult> Add(long walletId) 

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Add(AddTransactionViewModel model) 

事は、私が呼び出されるGETメソッド(最初の)Ajax.BeginForm使用してPOSTメソッドを呼び出そうとするたびにです。

@using (Ajax.BeginForm("Add", "Transactions", 
    new AjaxOptions() { HttpMethod = "POST" }) 
{ 
    ... 
} 

これはなぜ起こったのですか?もちろん、GETメソッドの名前をAddTransactionに変更するとコードは機能しますが、なぜそれがそのままではないのか理解したいと思います。

答えて

1

これは、BeginFormが内部でGetVirtualPathを使用してルートテーブルからURLを取得するためです。あなたの例では、最初のリンクがルートテーブルに追加されます。

単に以下でPOSTメソッドを編集することはトリックを行う必要があります。

[HttpPost] 
[ValidateAntiForgeryToken] 
[Route("Add")] 
public async Task<ActionResult> Add(AddTransactionViewModel model) 
関連する問題