2011-01-25 12 views
18

コントローラコンストラクタ内でリクエストをリダイレクトする方法を知りたいですか?MVC - コンストラクタ内でのリダイレクト

例: コンストラクタ内では、オブジェクトを動的な値で初期化する必要があります。場合によっては、そのようにしたくない場合や、他の場所にリダイレクトしたい場合があります。 同じように、コンストラクタの残りの部分は "元の次のアクション"も実行されません。

どうすればいいですか? ありがとう

EDIT#1

は、最初は私が使用:

あり
public override void OnActionExecuting(ActionExecutingContext filterContext) 

を私はいくつかの他のコントローラ/アクション/ URLにリダイレクトすることができ、それ以降の時間で、私は私を変更するために必要なコントローラでは、コンストラクタ内の変数を初期化し、リクエストをリダイレクトする必要のあるコードをいくつか持っています:P

OnActionExecutingはAFTER thコントローラのコンストラクタです。 私のロジックでは、リダイレクトをそこで行う必要があります。

答えて

45

コンテキストが初期化されていない可能性があるため、コントローラコンストラクタ内でリダイレクトを実行することは適切ではありません。標準的な方法は、カスタムアクション属性を記述してOnActionExecutingメソッドをオーバーライドし、内部でリダイレクトを実行することです。例:

この属性でリダイレクトするコントローラを装飾します。この属性でリダイレクトしているコントローラーを装飾しないように注意してください。そうしないと、無限ループに陥ることになります。

だから、あなたは可能性:

[RedirectingAction] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     // This action is never going to execute if the 
     // redirecting condition is met 
     return View(); 
    } 
} 

public class SomeOtherController : Controller 
{ 
    public ActionResult SomeAction() 
    { 
     return View(); 
    } 
} 
+0

あなたはそれに私を打つ:)。 – bastijn

+0

ヒントありがとうございましたが、それは以前私が使っていたものです。エディット#1 – Dryadwoods

+0

@emanyalpsidをチェックして、それをこのようにしておきましょう。コンテキストがまだ初期化されていないので、コントローラコンストラクタ内でリダイレクトできません。あなたはおそらく 'Initialize'メソッドの中でこれを行うことができますが、あなたがこれを行う必要がある場合は何か間違っています。 –

関連する問題