Во-первых, использование UpdatePanel все равно заставит страницу выполнить полный PostBack, но только обновленные части будут снова отправлены в браузер, поэтому это не уменьшит нагрузку на сервер. Во-вторых, вы не можете получить доступ к таймеру управления, как это.
Но почему бы не сделать это намного проще? Если вы действительно хотите, чтобы пользователи входили в систему, то почему бы не выполнить Ajax-запрос к некоторому URL-адресу, чтобы поддержать сеанс.
<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 здесь: запуск и остановка / пауза setInterval с использованием javascript, jQuery
Но вы также можете увеличить время, необходимое apsnet для выхода из системы.
как увеличить время ожидания сеанса в asp.net?
Или войдите в систему с постоянным файлом cookie. Обычно при входе в систему вы видите флажок «держать меня в системе» или «запомнить меня» или что-то в этом роде.
Как создать постоянные куки в asp.net?
UPDATE
Обновление 500 КБ на пользователя каждые 5 секунд кажется плохой идеей, с или без 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;
}
}