私はこのチュートリアルに従っています:
ユーザーがボタンをクリックしてから、属性のない関数が呼び出された場合の状況を説明します。
ただし、HttpPost 属性を持つ関数が追加されると、属性のない関数ではなく、この関数が呼び出されます。
ボタンは、ポスト リクエストを作成する Html.BeginForm() を開始します。では、なぜ属性のない関数が呼び出されたのでしょうか?
私はこのチュートリアルに従っています:
ユーザーがボタンをクリックしてから、属性のない関数が呼び出された場合の状況を説明します。
ただし、HttpPost 属性を持つ関数が追加されると、属性のない関数ではなく、この関数が呼び出されます。
ボタンは、ポスト リクエストを作成する Html.BeginForm() を開始します。では、なぜ属性のない関数が呼び出されたのでしょうか?
送信ボタンは常にリクエストを開始しますHttpPost
。
一方a
、アクションを指すハイパーリンク (タグ)は常にHttpGet
.
編集:私はあなたの混乱を理解しています.@RickAndMSFTが何を言おうとしているのかを示すために以下を参照してください:
次のアクション メソッドがあるとします。
[HttpGet]
public ActionResult SearchIndex()
{
}
HttpGet
このアクションはリクエストのみを受け付けます
注:属性を削除すると、すべての Request TypesHttpGet
が受け入れられます。
したがって、次の場合:
public ActionResult SearchIndex()
{
}
上記のメソッドはすでに投稿リクエストを受け入れているため、投稿メソッドは必要ありません。これは、問題のページが実際には何も変更/保存/作成していないためです。データをリストしているだけです。
私のチュートリアルを読んでくれてありがとう。MVC 4 バージョンを読みたいと思うかもしれません。@mattytommo が書いているように、送信すると POST が発生します。チュートリアルの後半で、BeginForm オーバーロードを使用してルーティングし、GET メソッドに送信します。ASP.NET MVC パターンは、POST または GET と同じメソッド名を使用します。取得要求は HTTPGET メソッドに送られ (デフォルトでは、[HttpGet] 属性は必要ありません)、送信は [HttpPost] メソッドに送られます。すべての編集/作成メソッドを見てください - 通常は同じメソッド名です。属性で C# をオーバーロードできないため、パラメーターが同じ場合は、別の属性を使用してメソッド名を変更します (チュートリアルの最後を参照)。