Javascript 可以禁用用户控件中的 ASP.Net 控件吗?



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 秒刷新一次,因为它会进行完整的回发。

首先,使用 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 注销用户所需的时间。

如何在 asp.net 中增加会话超时?

或者使用持久性 Cookie 登录用户。通常,登录时,您会看到一个复选框"保持我登录"或"记住我"或类似的东西。

如何在 asp.net 中创建持久性 Cookie?

更新

每 5 秒更新每个用户 500kb 似乎是一个坏主意,无论有没有 UpdatePanel。但这里有一种方法可以从前端停止计时器。

<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;
}
}

最新更新