Mvc 6 で Areas を使用しており、特定の各エリアにルーティングしようとしています。たとえば、私はこれを持っています:
私のコントローラーの外観は、次のように Area および route 属性で装飾されています。
[Authorize]
[Area("Test")]
[Route("[area]/[controller]")]
public class TestController : Controller
次に、以下のように定義された 2 つの HTTPGET メソッドがあります。
public IActionResult Index()
{
var model = new TestViewModel();
return View(model);
}
public IActionResult Create()
{
var model = new TestViewModel();
return View(model);
}
最後に、私のフォームは次のようになります。
<form asp-route-area="Test" asp-controller="Test" asp-action="Create" asp-antiforgery="false" method="get">
<input type="submit" value="Generate test"/>
</form>
フォームを投稿しようとすると、次のようにスローされます。
AmbiguousActionException: 複数のアクションが一致しました。次のアクションは、ルート データと一致し、すべての制約が満たされていました。
Areas.Test.Controllers.TestController.Index
Areas.Test.Controllers.TestController.Create
asp-action で定義すると Create メソッドにバインドされると思われるかもしれませんが、フォームのレンダリングされたマークアップを確認すると、次のようになります。
<form method="get" action="/Test/Test">
<input type="submit" value="Generate test">
</form>
私のメソッド Create は処理されません。テスト/テスト (エリア/コントローラー) のみをレンダリングします。
[Route("Create")]
また、結果の有無にかかわらずメソッドを装飾しようとしました[HttpGet("Create")]
。
ここで明らかなことを見逃していますか?