我有一个视图索引,从EnqueteController里面的Index Action调用,里面有我所有的javascript代码。这个视图是RenderPartial的一个表单,_EnqueteForm有我所有的表单输入。在我的javascript部分(在索引中),我有以下内容:
@section Scripts{
<script type="text/javascript">
var IDLE_TIMEOUT = 10; //seconds
var _idleSecondsCounter = 0;
document.onclick = function () {
_idleSecondsCounter = 0;
};
document.onmousemove = function () {
_idleSecondsCounter = 0;
};
document.onkeypress = function () {
_idleSecondsCounter = 0;
};
window.setInterval(CheckIdleTime, 1000);
function CheckIdleTime() {
_idleSecondsCounter++;
if (oPanel)
oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
if (_idleSecondsCounter >= IDLE_TIMEOUT) {
$.ajax({
cache: false,
url: '/Enquete/Inactive',
type: 'POST',
dataType: "json",
data: $('form').serialize(),
});
}
}
}
在不活动10秒后,它会从Enquete Controller调用非活动动作。
此操作如下所示:
[HttpPost]
public ActionResult Inactive([System.Web.Http.FromBody] InfoFormulaireEnqueteModele m)
{
int userId = this.UserId();
LibraryEnquete.EnregistrerFormulaire(m, userId);
TransitionEtatPrecedent(m.HevEvenementID, userId);
return View("Logout");
}
我的动作在10秒后被正确调用,并且它正在调用LibraryEnquete.EnrigistrerFormulaire和TransitionEtatPrecedent。但我的问题是:
1)它不会改为退出&#39;图
2)出于某种原因,我的非活动方法是从其他页面调用的?!一次调用后,我停止应用程序,一旦我重新启动它,从主页面(不是EnqueteController索引页面),它调用非活动方法20次,直到我停止应用程序
答案 0 :(得分:0)
Ajax调用不处理重定向响应(http状态代码3xx)。
通过将视图返回到ajax调用,您只是将视图呈现为ajax成功事件处理程序中的字符串。
为了让浏览器呈现注销视图,您可以继续提交表单而不使用ajax:
if (_idleSecondsCounter >= IDLE_TIMEOUT) {
$('form').submit();
}
如果表单的操作不适用于/Enquete/Inactive
,您可以在提交表单之前更改操作:
if (_idleSecondsCounter >= IDLE_TIMEOUT) {
$('form').prop('action', '/Enquete/Inactive');
$('form').submit();
}