超时后重定向视图

时间:2017-03-13 01:32:40

标签: ajax asp.net-mvc forms

我有一个视图索引,从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次,直到我停止应用程序

1 个答案:

答案 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();
}