Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript超时导致在aspx C#page-0x800a1391–中回发;JavaScript运行时错误_Javascript_C#_Asp.net_Timeout - Fatal编程技术网

JavaScript超时导致在aspx C#page-0x800a1391–中回发;JavaScript运行时错误

JavaScript超时导致在aspx C#page-0x800a1391–中回发;JavaScript运行时错误,javascript,c#,asp.net,timeout,Javascript,C#,Asp.net,Timeout,下面的JS代码显示剩余时间,但当按下Yes按钮(aspx按钮)重置时间时,它会导致回发。因此,当计时显示在屏幕上,并单击“是”时,它将清空主页中的gridview,如果主模式弹出窗口打开,它将关闭它,使用户将丢失任何内容。您知道如何修改它以避免在单击“是”时回发吗?还是更好的建议 代码: 组合解决方案来自: 我找到了一个更好的解决方案,与第一个方案结合使用。以下是修改后的JS代码: var interval; function SessionExpireAlert(timeout) {

下面的JS代码显示剩余时间,但当按下Yes按钮(aspx按钮)重置时间时,它会导致回发。因此,当计时显示在屏幕上,并单击“是”时,它将清空主页中的gridview,如果主模式弹出窗口打开,它将关闭它,使用户将丢失任何内容。您知道如何修改它以避免在单击“是”时回发吗?还是更好的建议

代码:

组合解决方案来自:

我找到了一个更好的解决方案,与第一个方案结合使用。以下是修改后的JS代码:

    var interval;
function SessionExpireAlert(timeout) {
    clearInterval(interval);
    var seconds = timeout / 1000;
    document.getElementById("seconds").innerHTML = seconds;
    document.getElementById("secondsIdle").innerHTML = seconds;
    interval = setInterval(function () {
        seconds--;
        document.getElementById("seconds").innerHTML = seconds;
        document.getElementById("secondsIdle").innerHTML = seconds;

    }, 1000);

    setTimeout(function () {
        //Show Popup before 50 seconds of timeout.
        $find("mpeTimeout").show();
    }, timeout - 50 * 1000);
    //if (seconds == 0) {
    //    window.location = "Login.aspx";
    //}
    setTimeout(function () {
        window.location = "Login.aspx";
    }, timeout);
};
function ResetSession() {
    PageMethods.ResetSession(OnSuccess);
    return false;
}
function OnSuccess(response, userContext, methodName) {
    SessionExpireAlert(response);
}
以下是ASPX代码:

<%-- FOR TIME OUT --%>

        <script type="text/javascript" src="js/timeOutScript.js"></script>
        <h3>Session Idle:&nbsp;<span id="secondsIdle"></span>&nbsp;seconds.</h3>
        <asp:LinkButton ID="lnkFake3" runat="server" />
        <ajax:ModalPopupExtender ID="mpeTimeout" BehaviorID ="mpeTimeout" runat="server" PopupControlID="pnlPopupmpeTimeout" TargetControlID="lnkFake3"
            OkControlID="btnYes" CancelControlID="btnNo" BackgroundCssClass="modalBackground3" OnOkScript = "ResetSession()">
        </ajax:ModalPopupExtender>
        <asp:Panel ID="pnlPopupmpeTimeout" runat="server" CssClass="modalPopup3" Style="display: none">
            <div class="header">
                Session Expiring!
            </div>
            <div class="body">
                Your Session will expire in&nbsp;<span id="seconds"></span>&nbsp;seconds.<br />
                Do you want to continue?
            </div>
            <div class="footer" align="right">
                <asp:Button ID="btnYes" runat="server" Text="Yes" CssClass="yes3" OnClick="btnYes_Click" OnClientClick="return ResetSession()"/>
                <asp:Button ID="btnNo" runat="server" Text="No" CssClass="no3" OnClick="btnNo_Click"/> 
            </div>
        </asp:Panel>

        <%-- ENDS TIME OUT --%>
标记:0x800a1391–JavaScript运行时错误:“PageMethods”未定义。

您的
ResetSession()
函数显式刷新页面。你甚至在该函数的注释中这样说。如果你不想让它这么做,那么我想让它做你想让它做的任何事情?到底是什么?
<%-- FOR TIME OUT --%>

        <script type="text/javascript" src="js/timeOutScript.js"></script>
        <h3>Session Idle:&nbsp;<span id="secondsIdle"></span>&nbsp;seconds.</h3>
        <asp:LinkButton ID="lnkFake3" runat="server" />
        <ajax:ModalPopupExtender ID="mpeTimeout" BehaviorID ="mpeTimeout" runat="server" PopupControlID="pnlPopupmpeTimeout" TargetControlID="lnkFake3"
            OkControlID="btnYes" CancelControlID="btnNo" BackgroundCssClass="modalBackground3" OnOkScript = "ResetSession()">
        </ajax:ModalPopupExtender>
        <asp:Panel ID="pnlPopupmpeTimeout" runat="server" CssClass="modalPopup3" Style="display: none">
            <div class="header">
                Session Expiring!
            </div>
            <div class="body">
                Your Session will expire in&nbsp;<span id="seconds"></span>&nbsp;seconds.<br />
                Do you want to continue?
            </div>
            <div class="footer" align="right">
                <asp:Button ID="btnYes" runat="server" Text="Yes" CssClass="yes3" OnClick="btnYes_Click" OnClientClick="return ResetSession()"/>
                <asp:Button ID="btnNo" runat="server" Text="No" CssClass="no3" OnClick="btnNo_Click"/> 
            </div>
        </asp:Panel>

        <%-- ENDS TIME OUT --%>
protected void Page_Load(object sender, EventArgs e)
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);

    lbUserID.Text = Context.User.Identity.Name;
    UpdateProgress1.AssociatedUpdatePanelID = UpdatePanel1.UniqueID;
    lbLocalTime.Text = DateTime.Now.ToLongDateString();
    if (!this.IsPostBack)
    {

        /*FOR TIMEOUT PURPOSE*/

        Session["Reset"] = true;
        Configuration config = WebConfigurationManager.OpenWebConfiguration("~/Web.Config");
        SessionStateSection section = (SessionStateSection)config.GetSection("system.web/sessionState");
        //int timeout = (int)section.Timeout.TotalMinutes * 1000 * 60;
        int timeout = GetSessionTimeout();
        ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + timeout + ");", true);

        /*ENDS TIME OUT*/

    }

}

[WebMethod(EnableSession = true)]
public static int ResetSession()
{
    HttpContext.Current.Session["Reset"] = true;
    int timeout = GetSessionTimeout();
    return timeout;
}

private static int GetSessionTimeout()
{
    Configuration config = WebConfigurationManager.OpenWebConfiguration("~/Web.Config");
    SessionStateSection section = (SessionStateSection)config.GetSection("system.web/sessionState");
    return Convert.ToInt32(section.Timeout.TotalMinutes * 1000 * 60);
}