web-dev-qa-db-ja.com

HTMLボタン(送信またはフォームの投稿ボタンではない)をクリックしてコントローラーの特定のアクションを呼び出すAsp.net MVC

フォームの送信ボタンをクリックすると、HTTPPost属性を持つコントローラーのアクションが呼び出されますが、通常のHTMLボタンがクリックされたときに呼び出したり、アクションを実行したりする場合はどうなりますか?

http://www.codeproject.com/Tips/198477/Calling-a-MVC-Controller-and-Action-Method-using-H

MVCコントローラーとアクションメソッドを呼び出すHTMLボタン

アプローチを示していますが、どちらもビューでコントローラー名を使用しているため、ビューはコントローラーについて知っている必要があります。ビューがコントローラーについて知る必要がないという答えを探しています。ビューはコントローラーから独立している必要があるため、ビューはコントローラーについて認識してはなりません。したがって、答えがわかっている場合は、返信してください。

8
Yogesh

によって作成されたURLにユーザーを誘導するフォーム

<a href='@Url.Action("{action}", "{controller}")'> click me </a> 

または

@using(BeginForm("{action}", "{controller}")

あなたがやりたいことをします。

それは

  • ボタンリンク

重要なのは目的地です。ビューは、アクションまたはコントローラーについて何も「認識」しません。ヘルパーはそうします。

16
Dave Alperovich

クライアント側から(つまり、ビューから)MVCアクションを実行するには、URLをヒットする必要があります(任意の動詞:get、post、putなど)。したがって、ビューからアクションを実行するには、そのアクションのURLを知っている必要があります。デフォルトでは、そのURLはcontrollername/actionnameに直接マップされますが、ビューとビューの間にさらに抽象化を作成する場合は、これを再定義できます。コントローラ。

これを考えると、Ajax httpリクエストを実行するには、ボタンをURLへのリンクにするか、jsにリンクする必要があります。

お役に立てば幸いです。

0
Ben

同じコントローラー上で同じ名前と同じHTTP動詞を持つ2つのアクションを持つことはできません。だからあなたが求めていることは意味がありません。アクションとコントローラー名を指定せずに、ビューをレンダリングしたものと同じコントローラーアクションを呼び出すことができます。アクションとコントローラー名を指定せずにHtml.BeginForm()が機能する理由は、フォームがサーバーにPOSTリクエストを送信しており、2つのアクションを区別できるためです。

0
Darin Dimitrov