8

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

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

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

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

4

3 に答える 3

16

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

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

また

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

あなたが望むことをします。

それは

  • ボタン リンク

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

于 2013-03-01T13:54:27.973 に答える
0

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

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

それが役立つことを願っています。

于 2013-03-01T13:55:21.047 に答える
0

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

于 2013-03-01T13:59:05.243 に答える