2013-05-20 362 views
16

を投稿するこの質問は、ここに頼まれました:ASP.NET MVC:パラメータを持つRedirectToActionはアクション

RedirectToAction with parameter

しかし、私は、同じ名前で異なるパラメータを持つ2つのアクションを持っている場合は? GET Termsアクションの代わりに、POST Termsアクションにリダイレクトするにはどうすればよいですか。

return Terms(month, year, deposit, total); 

の代わりに::

return RedirectToAction("Terms", {month, year, deposit, total}); 
+0

RedirectToActionをお探しですか? – PSL

+0

http://stackoverflow.com/questions/2626179/routing-to-the-actions-with-same-names-but-different-parameters –

+2

投稿アクションにリダイレクトすることはできません。リダイレクトは常に取得であるため、単純にはできません。 –

答えて

39

ネヴァーマインドのみんな、メソッドを直接使用することをお勧めしますが、私はあなたのアーキテクチャ/実装を再考することを強くお勧めします。

HTTPプロトコルは安全で安全でない動詞の考え方を取り入れています。 GETのような安全な動詞は、何らかの形でサーバーの状態を変更するとは考えていませんが、POST、PUTなどの安全でない動詞は状態を変更します。 POSTメソッドを呼び出すと、POSTが状態を変更することは考えられないので、この原則に違反しています。

また、ベストプラクティスでは、すべての操作で動詞を制限する必要があるため、最初の「Terms」メソッドがGETである場合は、HttpGet属性を追加して、他のHttpアクションがアクションのサーバー。

+7

解決策です。しかし、それは少しハックのように思える:ブラウザのアドレスはまだ古い方法です。そうすれば、両方のメソッドが同じ名前なので、これを見ることはできません。しかし、この問題は、引数を持つメソッドが「TermsPost」と呼ばれるときに表示されます。ブラウザのアドレスバーに「TermsPost」(「利用規約」ではない)を取得するにはどうすればよいですか? – pt12lol

+0

pt12lolに同意すると、元のアクションと呼ばれるURLが保持されます。 –

+0

@ pt12lol:ここでは2つの問題があります。ブラウザは実際にページがどのMVCアクションから来たのかを知る必要はなく、RedirectToActionはブラウザではなく内部プログラミング管理のためのものです。 – Arjang

3

をあなたが呼び出すことができることを正しい実際に私はだけではなく、そのようRedirectToActionを使用してのメソッドを直接呼び出すことができ

public ActionResult Terms() { 
    //get method 
} 

[HttpPost] 
public ActionResult Terms(string month, string year, int deposit = 0, int total = 0) { 
    //process POST request 
} 
関連する問題