将window.SessionTimeout脚本传递给js文件

时间:2014-05-16 21:26:04

标签: javascript asp.net-mvc view

我在做一个MVC应用程序。这是在我的_Layout.cshtml

我需要将它移动到一个js文件

<script type="text/javascript">
window.SessionTimeout = (function() {
    var _timeLeft, _popupTimer, _countDownTimer;

    var stopTimers = function() {
        window.clearTimeout(_popupTimer);
        window.clearTimeout(_countDownTimer);
    };

    var updateCountDown = function() {
        var min = Math.floor(_timeLeft / 60);
        var sec = _timeLeft % 60;
        if(sec < 10)
            sec = "0" + sec;

        document.getElementById("CountDownHolder").innerHTML = min + ":" + sec;

        if(_timeLeft > 0) {
            _timeLeft--;
            _countDownTimer = window.setTimeout(updateCountDown, 1000);
        } else  {
            document.location = "Home/TimeOutPage";
        }            
    };

    var showPopup = function() {
        _timeLeft = 60;
        updateCountDown();
        ClientTimeoutPopup.Show();
    };

    var schedulePopup = function() {
        stopTimers();
        _popupTimer = window.setTimeout(showPopup, @PopupShowDelay);
    };

    var sendKeepAlive = function() {
        stopTimers();
        ClientTimeoutPopup.Hide();
        SessionTimeout.schedulePopup();
    };

    return {
        schedulePopup: schedulePopup,
        sendKeepAlive: sendKeepAlive
    };

})();    

我尝试仅复制脚本标记之间的代码,但它不起作用。我知道问题在于函数签名

window.SessionTimeout =(function(){...

但我不知道如何在js文件中使用 window.SessionTimeout

@PopupShowDelay在我的视图中定义如下:

       @functions { 
        public int PopupShowDelay
        {
            get { return 60000 * (Session.Timeout - 1); }
        }
    }

更新

好的,我发现了错误。 问题是变量

@PopupShowDelay

我在视图中定义了该文件并尝试阅读 .js 文件。

所以,我要检查一下: Passing parameters to JavaScript files

Thankls !!

2 个答案:

答案 0 :(得分:0)

您可能在嵌套函数中遇到this上下文问题。 You can read more here

答案 1 :(得分:0)

如果您将文件链接到模板文档正文末尾的脚本标记中并且文件正确加载(如果执行代码则使用console.log进行测试),那么

您的代码应该正常工作。