如果我们使用ajax调用来返回部分视图,那么action方法的响应可能会返回部分视图的缓存输出。已在多个SO帖here,here,here
上讨论了该问题要解决问题,我必须在行动方法中执行ModelState.Clear()
。
我有几个使用Ajax调用返回部分视图的动作方法。所以我认为不是在每个方法中做ModelState.Clear(),我可以创建自定义ActionFilterAttribute
,如下所示
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.Controller.ViewData.ModelState.Clear();
base.OnResultExecuting(filterContext);
}
}
然后将其注册到全局过滤器
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new NoCacheAttribute());
}
这似乎工作正常。
但是我想知道在执行操作之前是否有任何不良影响ModelState.Clear()
?如果没有,那么为什么这不是asp.net mvc中的默认行为