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.Actionrerentrantly处理子操作方法(在处理初始操作方法期间)并且为两者调用过滤器.
您可以通过检查filterContext.IsChildAction属性来检测这种情况.
| 归档时间: |
|
| 查看次数: |
4019 次 |
| 最近记录: |