ASP.NET Обновить страницу по таймеру; база данных запросов между таймером

"У меня есть решение в моей голове, но я не уверен, возможно ли это в ASP.NET. У меня нет большого опыта работы с таймерами. Моя идея заключается в следующем:

'Code Behind
'At the end of the timer(lets say 1 minute)
    Dim qry = "SELECT ISNULL(Value, '') FROM Database.Schema.Table WHERE 
               Column = @Something"

    'set up sql connection and execute query
    Using sqlcon as new SQLConnection() 'Don't focus on this part
        Using sqlcmd = New SQLCommand(sqlcon,qry) 'Don't focus on this part either syntax is probably incorrect
            sqlcmd.Parameters.Add("Something", VarChar)
            sqlcmd.Parameters("Something").Value = "Row Found"

            'Refresh page; assign label control on .aspx page to value of returned query 
            'SafeToString() is a function that will safely return a string whether the value is some string, DBNULL, Nothing, or ''

             lblString.Text = SafeToString(sqlcmd.ExecuteScalar())
        End Using
    End Using

Я хочу быть в состоянии сделать это, сохраняя при этом положение свитков. Поэтому я не перебиваю работу / просмотр, который делает пользователь.

Спасибо всем за ваш вклад!

2 ответа

Я никогда не использовал WebForms (о чем я предполагаю, что этот вопрос), но, несмотря на это, я думаю, что вы подходите к проблеме неправильно. Обновление страницы является деструктивным и отвлекающим, когда обновляется страница, браузер должен снова извлечь страницу (включая все ресурсы и сценарии) и заново отрендерить страницу.

Реализация на стороне клиента

Таким образом, решение должно быть реализовано на стороне клиента и не требовать полного обновления страницы, это может быть достигнуто с помощью Javascript и ajax(из Википедии) запросы. Короче ajax это механизм для выдачи дополнительных запросов веб-серверу, когда страница загружена и работает. Таким образом, вы можете получать новые данные в фоновом режиме, не прерывая работу пользователя.

  1. Когда страница загружается, установите время ожидания или интервал:

    let intervalId = setInterval(updateFromServer, 1000);
    

    Этот интервал будет вызывать updateFromServer каждую 1 секунду (1000 мс).

  2. Определить функцию updateFromServer:

    function updateFromServer() {
        let newData = fetchData();
        updateData(newData);
    }
    

    Эта функция вызывается через установленный нами интервал и выполняет 2 действия: она выбирает новые данные с сервера и передает их в DOM, используя updateData,

  3. Вы можете использовать ajax (например, с jquery) для извлечения данных:

    function fetchData() {
        return $.ajax({ 
            type: "GET", 
            url: remote_url, 
            async: false 
        }).responseText;
    }
    

    Вот где приходит ajax, в приведенных выше строках используется jquery ajax api для отправки GET запрос к серверу по ссылке remote_url, Браузер отправляет запрос и ожидает ответа от сервера.

  4. И, наконец, обновите страницу (я снова использую jquery):

    function updateData(newData) {
        $('#data-el').text(newData)
    } 
    

    Снова мы используем jquery здесь (вы можете использовать чистый javascript, хотя), чтобы найти элемент с идентификатором data-el и установив его содержимое newData,

Уважать Page Methods, JS может вызвать метод code-behind, который может вернуть значение методу js, который затем может обновить страницу. Метод с кодом не может получить прямой доступ к странице, а только возвращает значение методу js.

Другие вопросы по тегам