Может ли Javascript отключить элемент управления ASP.Net внутри UserControl? - PullRequest
7 голосов
/ 10 июня 2019

Может ли Javascript отключить элемент управления ASP.net внутри UserControl?Мой файл 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 и не смог получить идентификатор.Когда я использую ClientIDMode="Static", страница не обновляется каждые 5 секунд, поскольку выполняется полная обратная передача.

1 Ответ

4 голосов
/ 13 июня 2019

Во-первых, использование 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...