ASP.NET MVC - 在过滤器操作中设置的RouteData未绑定到操作方法参数

时间:2013-06-26 05:57:31

标签: asp.net-mvc action-filter routedata custom-action-filter

我有一个动作过滤器(除其他外),向RouteData添加内容。但是,我的操作方法中的参数未获取该值。有什么想法吗?

动作过滤器:

public class SomeFilter : FilterAttribute, IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var someData = new SomeClass();
        //do stuff
        filterContext.RouteData.Values["someData"] = someData;
     }
}

行动方法:

[SomeFilter]
public ViewResult SomeActionMethod(SomeClass someData)
{
  //someData is null here
}

请注意,我的操作方法中的以下行确实会在动作过滤器中返回保存到其中的数据:

SomeClass isNotNull = RouteData.Values["someData"] as SomeClass;

任何人都知道为什么?

2 个答案:

答案 0 :(得分:2)

过滤器附加到动作(方法)。因此,在运行过滤器时,已经选择了参数的值。想象一下,如果你问的工作情况如何:

[SomeFilter]
public ViewResult SomeActionMethod()
{
    // ....
}

public ViewResult SomeActionMethod(SomeClass someData)
{
    // .....
}

您引用http://mysite.com/mycontroller/SomeActionMethod时没有查询参数。那么它应该调用第一个动作。但是如果你的过滤器要做你想要的,在它运行后,应该调用第二个动作。但那个没有过滤器,所以它应该调用第一个。圆形和圆形轮。

答案 1 :(得分:0)

这篇文章介绍了如何从动作过滤器修改参数值:

http://haacked.com/archive/2010/02/21/manipulating-action-method-parameters.aspx/