2

UpdatePanel が原因で問題が発生しました。コード ビハインドから Windows タイムアウトを割り当てています (スニペットはページの読み込み中です)。初めて時刻が正しく割り当てられます。しかし、ドロップダウンリストまたはページの読み込みを引き起こすその他のコントロールを変更すると、時間が割り当てられません。しかし、ページロードが発生するたびにセッション時間をリセットしたい.

 <script language="javascript" type="text/javascript">
 alert(<%=mintTimeout%>);
 window.setTimeout("endSession();",<%=mintTimeout%>);
 function endSession()
 {
     alert("Your session has expired. You will be redirected to the login page.");
 }

<form id="form1" runat="server">
<div>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
            <asp:ListItem>3</asp:ListItem>
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true">
            <asp:ListItem>a</asp:ListItem>
            <asp:ListItem>b</asp:ListItem>
            <asp:ListItem>c</asp:ListItem>
        </asp:DropDownList>
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>

私のコードビハインドは

 public int mintTimeout = 0;
    protected void Page_Load(object sender, EventArgs e)
    {
        Session.Timeout = 1;
        mintTimeout = (Session.Timeout) * 60000;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {

    }

これを乗り越えるのを手伝ってください。

4

1 に答える 1

1

ポストバックごとにタイムアウトをクリアして再割り当てする必要があります。pageLoadこれには関数を使用できます。以下のようにスクリプトを変更します。

var sessionExpiredTimeout = null;

function pageLoad() {
    if(sessionExpiredTimeout){
        clearTimeout(sessionExpiredTimeout);
    }
    sessionExpiredTimeout = setTimeout(endSession, <%= mintTimeout %> );
}

function endSession() {
    alert("Your session has expired. You will be redirected to the login page.");
}
于 2013-10-17T12:32:32.793 に答える