フォームの送信ボタンをクリックすると、HTTPPost属性を持つコントローラーのアクションが呼び出されますが、通常のHTMLボタンがクリックされたときに呼び出したり、アクションを実行したりする場合はどうなりますか?
http://www.codeproject.com/Tips/198477/Calling-a-MVC-Controller-and-Action-Method-using-H
MVCコントローラーとアクションメソッドを呼び出すHTMLボタン
アプローチを示していますが、どちらもビューでコントローラー名を使用しているため、ビューはコントローラーについて知っている必要があります。ビューがコントローラーについて知る必要がないという答えを探しています。ビューはコントローラーから独立している必要があるため、ビューはコントローラーについて認識してはなりません。したがって、答えがわかっている場合は、返信してください。
によって作成されたURLにユーザーを誘導するフォーム
<a href='@Url.Action("{action}", "{controller}")'> click me </a>
または
@using(BeginForm("{action}", "{controller}")
あなたがやりたいことをします。
それは
重要なのは目的地です。ビューは、アクションまたはコントローラーについて何も「認識」しません。ヘルパーはそうします。
クライアント側から(つまり、ビューから)MVCアクションを実行するには、URLをヒットする必要があります(任意の動詞:get、post、putなど)。したがって、ビューからアクションを実行するには、そのアクションのURLを知っている必要があります。デフォルトでは、そのURLはcontrollername/actionname
に直接マップされますが、ビューとビューの間にさらに抽象化を作成する場合は、これを再定義できます。コントローラ。
これを考えると、Ajax httpリクエストを実行するには、ボタンをURLへのリンクにするか、jsにリンクする必要があります。
お役に立てば幸いです。
同じコントローラー上で同じ名前と同じHTTP動詞を持つ2つのアクションを持つことはできません。だからあなたが求めていることは意味がありません。アクションとコントローラー名を指定せずに、ビューをレンダリングしたものと同じコントローラーアクションを呼び出すことができます。アクションとコントローラー名を指定せずにHtml.BeginForm()
が機能する理由は、フォームがサーバーにPOSTリクエストを送信しており、2つのアクションを区別できるためです。