2009-09-08 10 views
5

ASP.Net MVCコントローラには、別のコントローラまたはアクションに制御を転送するいくつかの方法があります。しかし、それらのすべてが、302と新しいブラウザ要求でクライアントのリダイレクトを引き起こします。ASP.Net MVC(またはCodeIgniter)に内部コントローラリダイレクトがないのはなぜですか?

クライアントに関係なく、内部に「別のコントローラのアクションを呼び出す」機能がないのはなぜですか?私はかなりPHPのCodeIgniterフレームワークもこの機能を欠いていると確信しています。

私が思いつくことができる最善の理由は、あなたが呼びたいコードがどこかで共通化される可能性があり、ASP.Net MVCで少なくとも操作がかなり高価になる可能性があるためです。しかし、a lot of people ask about this、それは最終的に利便性のように思える。

だから、多くのスマートな人々がこれらのフレームワークを設計しました。これを持っていない理由がいくつかあるでしょうか?

答えて

4

Codeigniterでは、特定のURLを他のコントローラ/アクションに向けるためのカスタムルートやものを設定できますが、コントローラ機能の途中で別のURLにジャンプすることを意味すると思いますか?

ビジネスロジックがある場合、特に再利用する場合は、コントローラーではなくモデルにする必要があります。何らかの条件に応じてコントローラ内の異なるビューを指定することもできます。モデルに「適合」しないコードを繰り返している場合は、静的ヘルパー関数またはライブラリクラスとして終了するはずです。

はそうそう、私はあなたが右のあなたが言うときにしていると思う:私が思い付くことができ

最高の理由はあなたに電話をかけたい任意のコードを因数分解することができたので、最終的にそれは、不要だということですどこかに共通する部分

これにより、MVCパターン内にとどまるようになります。

コントローラーを軽量に保つことをお勧めします。

2

私はそれがRESTの考え方に反するかもしれないと思っています。すべてがリソースです。サーバー転送を実行する場合は、そのリソースに対して追加のURLを提供することもできます。このようにして、クライアントは特定のURLで、リソースの特定の表現を受け取ることになります。それは実際には意味をなさない。

+0

私もこれについて考えました。内部リダイレクトを行うことで、(ルーティングによって定義された)複数のリソースを消費していることは明らかです。私はこれが機能性を排除するのに十分な理由であるかどうかはわかりませんでしたが、私の思考プロセスではそれが高くなっていました。 – womp

4

少なくとも、ASP.NET MVCでは、コントローラアクションはクリエイティブな方法で呼び出されたC#メソッドです。だから、あなただけ明示的にそうように、別のコントローラのアクションを呼び出すことができます。

サンプルコントローラ:

public class SampleController : Controller 
{ 
    public ActionResult Foo() 
    { 
     return View("foo"); 
    } 

    public ActionResult ShowMeFoo() 
    { 
     return Foo(); 
    } 
} 

を、私はほとんどの場合、1がこれを行うにはしたくないと思います。あなたのアプリケーションのRPCインターフェイスとしてのURLを考慮すると、別の結果を得るときに別のURLに転送する必要があります。すべての場合に適用されるわけではありませんが、ほとんどの人に訴えることができます。

+0

非常に真です。私は、RedirectToAction()のようなRedirectメソッドを使って別のControllerに転送することをもっと心配していると思いますが、これは同じコントローラを使用している場合にリダイレクトを避けるための良い方法です。 – womp

関連する問題