2017-04-06 77 views
0

我有一個JavaScript源文件,命名爲LIMDU.js,包含VAR和功能,這樣的 -javaScript的本地腳本找不到SRC腳本函數

var SessionTimeOutID; 

function KeepSessionAlive() { 
var sessionTimeoutWarning = @Session.Timeout; 
var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000; 

clearTimeout(SessionTimeOutID); 
SessionTimeOutID = setTimeout('SessionEnd()', sTimeout); 

function SessionEnd() { 
    window.location = "/Account/LogOff"; 
} 
} 

,並在CSHTML文件,我有這個:

<script type="text/javascript" src="~/Scripts/LIMDU.js"></script> 
<script> 
$(document).ready(function() { 
     KeepSessionAlive(); 
    }); 
</script> 

但是當我嘗試執行代碼時,我得到錯誤「KeepSessionAlive」找不到。

我認爲src代碼會在本地腳本代碼執行之前加載;如果情況並非如此,我該如何引用在src'd文件中定義的本地腳本塊中的函數?

+0

除非你有東西在它到達瀏覽器之前進行預處理,否則你的'LINDU.js'包含語法錯誤:'var sessionTimeoutWarning = @Session .Timeout;'錯誤與'@'一樣。通常情況下,服務器不會預處理'.js'文件(如'.cshtml'文件)。因此,首先要做的就是使用瀏覽器工具在控制檯中查找錯誤,並檢查服務器發送到瀏覽器的實際內容。如果它有語法錯誤,那就是問題所在。 –

+0

這就是那個腳本文件中的全部內容嗎? '@ Session.Timeout'實際上被替換了嗎?我猜沒有 – epascarello

+0

我認爲誤解是你試圖在JavaScript文件中使用Razor /'.cshtml'語法 - 這是不正確的。您可以使'KeepSessionAlive'將超時作爲參數,然後在您的.cshtml文件中傳遞'@ Session.Timeout',但我不是一個ASP人,所以我不確定。 –

回答

0

檢查您的控制檯。你的LIMDU.js文件沒有編譯(可能是undefined @Session?)

+0

是的,就是這麼簡單;第一個版本在本地代碼中使用了@var,所以將它移回到cshtml解決了主要問題。謝謝您的幫助! –