2012-03-23 19 views

答えて

18

このためにfilterContext.Resultを使用できます。

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    //Check your condition here 
    if (true) 
    { 
     //Create your result 
     filterContext.Result = new EmptyResult(); 
    } 
    else 
     base.OnActionExecuting(filterContext); 
} 
+0

条件がtrueのときにbase.OnActionExecutingをスキップする理由は何ですか?私の場合、結果を設定する前に実行する必要があります。 – xr280xr

33

ダウンロードサンプルとMSDNの記事Filtering in ASP.NET MVCを参照してください。

Resultプロパティをnull以外の値に設定すると、OnActionExecutingおよびOnResultExecutingのメソッドでフィルタの実行をキャンセルできます。

保留中の任意のOnActionExecutedおよびOnActionExecutingフィルタは呼び出されず、キャンセルされたフィルタまたは保留中のフィルタにはOnActionExecutedメソッドが呼び出されません。

以前に実行されたフィルタ用のOnActionExecutedフィルタが実行されます。 OnResultExecutingandOnResultExecutedのフィルタがすべて実行されます。

サンプルから次のコードは、特定の条件がOnActionExecutingに満たされたときに特定のActionResultを返す方法を示しています。

if (filterContext.RouteData.Values.ContainsValue("Cancel")) 
{ 
    filterContext.Result = new RedirectResult("~/Home/Index"); 
    Trace.WriteLine(" Redirecting from Simple filter to /Home/Index"); 
} 
+2

複数のフィルタがあり、フィルタの順序が重要な場合は、フィルタの登録時に「Order」パラメータを指定して、Rickがその結果の仕組みの概要を説明したように実行順序を制御できるようにする必要がありますfilterContext.Resultプロパティが動作します。 –

+0

良い点ニック - しかし私のセクションを参照してください。フィルターオーダー - オーダープロパティーは、同じクラスのフィルターにのみ適用されます。認証は常に最初に実行され、例外は最後に実行されます。 – RickAndMSFT

3

あなたはここに次のコードを使用することができます。

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ... 
    if (needToRedirect) //your condition here 
    { 
     ... 
     filterContext.Result = new RedirectToAction(string action, string controller) 
     return; 
    } 
    ... 
} 

RedirectToActionは、条件に基づいて特定のアクションをリダイレクトします。

+0

RedirectToActionは少なくとも(MVC5では)メソッドなのでnew()できません。 – rumblefx0

関連する問題