JavaScript可以在UserControl中禁用ASP.net控件吗?我的Javascript文件是从MasterPage调用的,我也已经从ContentPage中尝试过。
我正在尝试将Javascript用作空闲计时器,以减少服务器回发而不会注销用户。当用户再次将焦点移到窗口上时,计时器将重新启动并再次刷新,直到用户闲置30分钟并暂停ASP.Net计时器为止。
Javascript:
var timer = $find('<%= TimerAutoRefresh.ClientID %>');
if (timer) {
//stop the timer
timer._stopTimer();
timer.set_enabled(false);
console.log("Timer disabled: " + timer);
}
ASP.net ASCX
<asp:UpdatePanel ID="UpdatePanel" runat="server">
<ContentTemplate>
<asp:Timer ID="TimerAutoRefresh" runat="server" Interval="5000" Enabled="true"></asp:Timer>
<asp:Literal ID="LiteralTest" runat="server">Timestamp</asp:Literal>
</ContentTemplate>
</asp:UpdatePanel>
我已经尝试了$ find和document.getElementById,但无法获取ID。当我使用ClientIDMode="Static"
时,页面会执行完整的回发,因此每5秒刷新一次。
答案 0 :(得分:4)
首先,使用UpdatePanel仍将使页面执行完整的回发,但是只有更新的部分才再次发送到浏览器,因此不会减少服务器负载。其次,您不能像这样访问计时器控件。
但是为什么不简化它呢?如果您真的想让用户登录,那为什么不对某个URL进行Ajax请求以保持会话正常进行。
<script>
var timer;
var interval = 2500;
function startTimer() {
timer = setInterval(function () {
$.ajax({
type: 'GET',
url: 'Default.aspx'
});
}, interval);
}
function stopTimer() {
clearInterval(timer);
}
startTimer();
</script>
更多有关jQuery计时器的信息:start & stop / pause setInterval with javascript, jQuery
但是您也可以增加apsnet注销用户所花费的时间。
how to increase session timeout in asp.net?
或使用永久cookie登录用户。通常,在登录时,您会看到一个复选框“让我保持登录状态”或“记住我”或类似内容。
How to create persistent cookies in asp.net?
更新
每用户每5秒更新500kb似乎是一个坏主意,无论是否使用UpdatePanels。但这是从前端停止计时器的一种方法。
<asp:UpdatePanel ID="UpdatePanel" runat="server">
<ContentTemplate>
<asp:Timer ID="TimerAutoRefresh" runat="server" Interval="5000" Enabled="true" OnTick="TimerAutoRefresh_Tick"></asp:Timer>
<asp:Literal ID="LiteralTest" runat="server">Timestamp</asp:Literal>
<asp:HiddenField ID="HiddenField1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
<button id="StopTimer">Stop Timer</button>
<script>
$('#StopTimer').bind('click', function (e) {
$('#<%= HiddenField1.ClientID %>').val('Stop!');
e.preventDefault();
});
</script>
然后在
后面的代码中protected void TimerAutoRefresh_Tick(object sender, EventArgs e)
{
LiteralTest.Text = DateTime.Now.ToString();
if (HiddenField1.Value == "Stop!")
{
LiteralTest.Text = "Stopped";
TimerAutoRefresh.Enabled = false;
}
}