Ben*_*ter 13 asp.net-mvc asp.net-mvc-3
我有一个带有以下签名的动作过滤器
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class UnitOfWorkAttribute : ActionFilterAttribute
Run Code Online (Sandbox Code Playgroud)
根据MSDN:
AllowMultiple属性指示属性的多个实例是否可以存在于元素上.如果设置为true,则允许多个实例; 如果设置为false(默认值),则只允许一个实例.
在MVC中,行为似乎有点奇怪.当我用这个属性修饰一个动作时,我发现OnActionExecuting
过滤器的方法被执行了两次.
过滤器仅在操作上声明,而不是在控制器上声明,并且我已清除任何全局过滤器.有人可以解释这种行为吗?
Bra*_*ger 32
我遇到了同样的问题.(我安装了一个全局过滤器(只有一次)并发现每个请求都调用了它IActionFilter
和IResultFilter
方法两次.filterContext.HttpContext
传递给这些方法的对象对于两个调用完全相同.)
原来这是由于Html.Action
在视图中使用.看起来(通过查看调用堆栈)调用Html.Action
rerentrantly处理子操作方法(在处理初始操作方法期间)并且为两者调用过滤器.
您可以通过检查filterContext.IsChildAction
属性来检测这种情况.
归档时间: |
|
查看次数: |
4019 次 |
最近记录: |