Обновление карт Google в asp. net с asp: таймер работает только один раз - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь создать страницу asp. net, которая отображает данные, полученные из Google Analytics API, и отображает их в Google Charts. Об этой части кое-что уже позаботилось, но теперь я хочу, чтобы она регулярно обновляла sh, скажем, с 10 se c. интервал. Страница наследуется от MasterPageFile (например, панель навигации) fyi

Она сделана с

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/2018.master" AutoEventWireup="true" CodeFile="Googlytics.aspx.cs" Inherits="Admin_Default" %>

<asp:Content>
  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
      <asp:Timer runat="server" ID="Timer1" Interval="10000" Enabled="true" OnTick="Timer1_Tick"></asp:Timer>
         <asp:HiddenField ID="hfgauge" ClientIDMode="Static" runat="server" />
            <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
            <script type="text/javascript">
              $(document).ready(function () {
                drawAndMakeCharts();
              });
-- js code for charts here --
      (parseInt(document.getElementById('hfgauge').value)  -- Used in the charts.
-- closing all --

Я использую HiddenField в качестве держателя значения для того, что я вводю в диаграммы.

Сценарий:

    <script runat="server">
        protected void Timer1_Tick(object sender, EventArgs e)
        {
            test1 += 1;
            hfgauge.Value = "" + test1;
            RegisterClientStartupScript("drawAll", "drawAndMakeCharts();");
        }

    protected void RegisterClientStartupScript(string scriptKey, string scriptText)
    {
        ScriptManager sManager = ScriptManager.GetCurrent(this.Page);

        if (sManager != null && sManager.IsInAsyncPostBack)
        {
            //if a MS AJAX request, use the Scriptmanager class
            ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), scriptKey, scriptText, true);
        }
        else
        {
            //if a standard postback, use the standard ClientScript method
            scriptText = string.Concat("Sys.Application.add_load(function(){", scriptText, "});");
            this.Page.ClientScript.RegisterStartupScript(this.GetType(), scriptKey, scriptText, true);
        }
    }
    </script>

RegisterClientStartupScript фактически запускает серверную часть, но я не уверен, имеет ли это значение. Он работает в частичном классе: System.Web.UI.Page

Все это «работает» в том смысле, что оно загрузит и покажет все диаграммы, затем обновит и покажет новые диаграммы один раз. После этого он перестает обновлять значения, но, похоже, продолжает обновлять графики.

...