Asp.net mvc 访问ASP.NET MVC操作参数
这一定很简单,但我似乎不明白。我正在操作过滤器内设置一个操作参数,如下所示:Asp.net mvc 访问ASP.NET MVC操作参数,asp.net-mvc,Asp.net Mvc,这一定很简单,但我似乎不明白。我正在操作过滤器内设置一个操作参数,如下所示: public class MyFilter : ActionFilterAttribute { public override void OnActionExecuting (ActionExecutingContext filterContext) { filterContext.ActionParameters["MyParam"] = "MyValue"; } } [M
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();
}
}
我将过滤器应用于整个控制器,如下所示:
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?也许您可以使用:
[MyFilter]
public ActionResult Index(string MyParam)
{
//Do something with MyParam
return View();
}
您可以使用
[MyFilter]
或只需一个操作来装饰整个控制器。我希望这能起作用:
var myParam = ValueProvider.GetValue("MyParam").RawValue as string;
由于ModelBinder使用
ValueProvider
获取值,我认为它应该能够获取过滤器中设置的值。您的URL是什么样子的?在这种情况下,我的URL只是访问索引操作方法(主页)。因此,MyParam不是来自URL,而是使用ActionParameters属性在操作过滤器内设置的。我的代码更复杂,为了清晰起见,我举了一个简单的例子。@Ralph Stevens:您尝试过这个解决方案吗:)?它适用于过滤器中设置的参数。我同意它可能有效,但这可能不是一个非常优雅的解决方案。过滤器将应用于整个控制器。一些操作方法将使用它,其他方法可能不使用。必须有另一种方法从action方法内部访问action参数(根据需要)。@Ralph Stevens:所以有些action方法会有这个参数,而有些则不会。您不必在每个操作方法中定义此参数。我可以说,在不需要时设置参数是不优雅的:)为什么说以强类型方式访问参数是不优雅的?我明白了。所以我只在一些方法中声明它。将此参数传递给action方法会影响传递给同一action方法的其余URL参数吗?