目前,我遇到了一个非常奇怪的问题。我只有一个页面应用程序,并且所有表单提交都通过以下方式拦截:
$('body').on('submit', 'form', function (e) {
$.ajax({ ... })
e.preventDefault();
return false;
});
在网站的某些部分,我已采取行动,这将触发两个请求。一个长期运行的请求和一个经常发生的请求来检查长期运行的请求的状态(有些过时,但是我有我的理由)。一切正常。
但是,这不能与我的表单提交处理程序结合使用。
工作示例:
var checker = function() {
$.ajax(/*check the state*/).done(function() {
setTimeout(checker(), 750);
});
};
$.ajax(//long running request);
checker();
不起作用的示例:
var checker = function() {
$.ajax(/*check the state*/).done(function() {
setTimeout(checker(), 750);
});
};
$('#my_form').submit();
checker();
在这种情况下,提交处理程序中的ajax请求将阻止所有其他请求,直到完成为止。有人对此有解释吗?此过程中涉及的所有控制器都装饰有:
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
谢谢你的帮助!
知道了!实际上
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
没有效果,因为我们使用了自定义控制器工厂。不幸的是,我们仅覆盖了GetControllerInstance()方法来从查询字符串解析我们的控制器类型,而不是GetControllerType()。由于此问题,方法GetSessionStateBeavoir()始终返回SessionStateBehavior.Default,因为为该方法提供的Type为null,并且默认检查包含在DefaultControllerFactory的原始实现中:
if (controllerType == null) {
return SessionStateBehavior.Default;
}
因此,我将逻辑确定为GetControllerType()的控制器类型转移了,现在一切都按预期工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句