2010-11-20 10 views

答えて

7

POSTリクエストを送信すると、フレームワークは自動的にPOSTアクションを呼び出します。

<% using (Html.BeginForm("Index", "Home", FormMethod.Post)) {%> 
    <input type="submit" value="OK" /> 
<% } %> 

それは自動的にPOSTのindexアクション呼び出します:

[HttpPost] 
public ActionResult Index() 
{ 
    ... 
} 

をしたり、AJAXリクエストを送信するためにjqueryのを使用して、投稿したいことを指定することができますので、たとえば、あなたは、HTMLフォームを使用している場合:

$.post('/home/index', function(result) { 
    alert('successfully invoked the POST index action'); 
}); 

PUTとDELETEのような他の動詞については、AJAX呼び出しでのみサポートされています。 HTML形式で指定することはできません。回避策がありますが。次の形式:

<% using (Html.BeginForm("Destroy", "Home", FormMethod.Post)) {%> 
    <%= Html.HttpMethodOverride(HttpVerbs.Delete) %> 
    <input type="submit" value="OK" /> 
<% } %> 

は、このアクションを呼び出します:

[HttpDelete] 
public ActionResult Destroy() {} 

これが機能する方法は、POST動詞が使用されているが、追加の隠しフィールドは、エンジンを許可する要求とともに送信されることです適切なコントローラーアクションにルーティングします。

$.ajax({ 
    url: '/home/destroy', 
    type: 'DELETE', 
    success: function(result) { 
    } 
}); 
+0

GETとPOSTの両方を処理するアクションを1つ設定できますか?または、私は2つのアクションが必要です – user514494

+0

はい、1つのアクションを持つことができます。このアクションは、クライアントが動詞をどのように使用していても常に呼び出されます。 –

2

があなたのアクションメソッドにこの属性を追加します:

[HttpPost] 
+0

これにより、GET要求が機能しなくなります。彼はPOSTとGETの両方を求めました。 – rboarman

+0

@ rboarman:ええと、彼はどこでそれを求めたのかわかりません。 – Tahbaza

+0

@ rboarman:ああ、私はあなたが彼のコメントで私の答えの後に別の質問に投稿されたことを意味しますか?まあ、私は透視的ではありません。 – Tahbaza

0

はちょうどあなたの処理アクションメソッドは、ANでのASPXに確認してくださいあなたはAJAXを使用している場合、あなたは直接あなたが欲しい動詞を指定することができますフォームのPOSTのためのアクション、あなたが行ってもいいです:

using(Html.BeginForm("ActionName", "ControllerName") {} 

ACTIONNAMEがPOSTを処理するメソッドです。

質問を誤解しましたか?

関連する問題