2010-03-06 70 views
3

这一定很简单,但我似乎无法弄清楚。访问ASP.NET MVC动作参数

public class MyFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting (ActionExecutingContext filterContext) 
    { 
     filterContext.ActionParameters["MyParam"] = "MyValue"; 
    } 
} 

我将过滤器应用于整个控制器如下:

[MyFilter] 
public class HomeController : Controller 
{ 
     public ActionResult Index() 
     { 
      // How do I access MyParam here? 
      return View(); 
     } 
} 

}

如何内部访问MyParam我如下设置一个动作过滤器内的操作参数一个行动方法?

+0

你的网址是什么样的? – 2010-03-06 06:04:22

+0

在这种情况下,我的URL只是访问索引操作方法(主页)。所以它只是http:// localhost – stepanian 2010-03-06 06:11:22

回答

3

也许你可以使用:

[MyFilter] 
public ActionResult Index(string MyParam) 
{ 
     //Do something with MyParam   
     return View(); 
} 

您可以[MyFilter]或只有一个动作装点整个控制器。

+0

MyParam不是来自URL,而是使用ActionParameters属性在动作过滤器中设置的。我的代码更复杂,我给出了一个简单的例子来说明。 – stepanian 2010-03-06 06:22:38

+0

@Ralph Stevens:你试过这个解决方案:)?它适用于过滤器中设置的参数。 – LukLed 2010-03-06 06:32:37

+0

我同意它可以工作,但这可能不是一个非常优雅的解决方案。该过滤器将应用于整个控制器。一些行动方法将使用它,而另一些则可能不行。必须有另一种方法来从动作方法内部访问动作参数(根据需要)。 – stepanian 2010-03-06 06:37:59

0

我希望这将工作:

var myParam = ValueProvider.GetValue("MyParam").RawValue as string; 

由于ValueProvider是什么modelbinders用得到我想它应该是能得到您的过滤器设置的值的值。