2012-03-19 8 views
0

この属性が使用された関数に送信されたパラメータを属性に渡すにはどうすればよいですか?例えば私はこのような何かをする必要があります...メソッドに送ら使用されているメソッドからパラメータを送ることができる方法はありますか

[Authorize, AuthorizeLimited(ModuleID=pageModuleId)] 
[HttpPost] 
public ActionResult MoveModule(int pageModuleId, int sequence) 
{ 
    db.PageModule_Move(pageModuleId, sequence); 
    return Json("OK"); 
} 

pageModuleIdも属性に行かなければなりません。申し訳ありませんが、これは既に私に答えを見つけることができませんでした尋ねられている場合。 @jrummellここで提供さ答えを使用して

EDIT

OKは私の最初のアクションフィルタ属性です:)これは、パーマを持っていません(AJAXで使用される)モジュールを編集する誰かを停止するだけです。

public class AuthorizeModuleEditAttribute : ActionFilterAttribute 
{ 
    private int _moduleID; 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     foreach (var parameter in filterContext.ActionParameters) 
     { 
      if (parameter.Key == "pageModuleId") 
      { 
       _moduleID = (int)filterContext.ActionParameters["pageModuleId"]; 
      } 
     } 

     if (!SiteHelper.UserPermsForModule(_moduleID)) //checks if user has perms to edit module 
      throw (new Exception("Invalid user rights")); 

     base.OnActionExecuting(filterContext); 
    } 
} 

答えて

4

いいえ、属性パラメータの値は、時定数をコンパイルする必要があります。

implement your own action filterの場合は、OnActionExecutingを無効にして、動作パラメータをfilterContext.ActionParamtersで調べることができます。

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    foreach(var parameter in filterContext.ActionParameters) 
    { 
     if (parameter.Key == "pageModuleId") 
     { 
      // do something with pageModuleId 
     } 
    } 

    base.OnActionExecuting(filterContext); 
} 
1

属性はメソッドに関連付けられており、メソッド呼び出しおよびそのパラメータには関連付けられません。

関連する問題