2010-03-06 61 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用得到我想它應該是能得到您的過濾器設置的值的值。