asp.net core webappのページハンドラはデフォルトでは、GET要求はOnGet,POST要求はOnPostによって処理されるが、View側から実行するハンドラを変更することが可能。
方法は、TagHelperを使用して、Submit時にasp-page-handler属性を指定する。
例えば、以下のような感じで、Submitボタンによって呼ばれるハンドラを指定することが可能。
<form method="post">
<button class="btn btn-secondary" asp-page-handler="cancel" type="submit">Cancel</button>
<button class="btn btn-primary" asp-page-handler="ok" type="submit">OK</button>
</form>
このような指定をすると、Cancelボタンクリック時には、OnPostCancelが呼び出され、OKボタンクリック時にはOnPostOkが呼び出される。ちなみに、ハンドラはOnの後ろに、asp-page-handlerで指定された名前の最初が大文字であれば、その後ろは大文字でも、小文字でも大丈夫なようだ。(OnPostOKでもOnPostOkでも大丈夫⇒静的言語なのに・・・)
なお、asp-page-handlerを指定した場合、URLに?handler=<ハンドラ名>が付加される。
URLを勝手に変更されたり、動的言語的な判断されるので、個人的には、好きな方法じゃないけど・・・
この機能を使わずにどのように、インプリするのかというと、古典的な方法を取るのも一つの方法。
それぞれのボタンにname属性を付けて、value=”1″とかしておいて、OnPostのパラメータにその名前のパラメータをstring型でボタン数分指定する。
ロジック中で、!string.IsNullOrEmpty(ボタン名)で条件分岐。
頭固いので、こういうやり方のほうが、単純で分かりやすいw