Идея Asp.net о том, как работает логика чата? - PullRequest
0 голосов
/ 10 мая 2018

в настоящее время у меня есть окно чата на веб-форме asp.net

Сейчас я использую скрипт-менеджер Таймер, панель обновления и триггер Обновление панели установлено на условный. Триггер установлен с таймером.

Каждые несколько секунд. Таймер запускает timer_tick, проверяет базу данных sql на наличие нового сообщения и обновляет панель обновления.

Моя проблема в том, что панель обновления обновляется каждые несколько секунд, независимо от наличия новых сообщений.

В коде позади, Как мне сделать только обратную передачу, если сделано условие. Это потому, что мой триггер установлен на таймер? Я проверил это. Даже если метод таймера полностью пуст. Он по-прежнему обновляет панель обновления.

Есть ли способ в методе таймера для принудительного запрета обратной передачи?

Можно ли заставить поток на стороне клиента проверять базу данных сообщений чата, а затем обновлять панель обновления, если выполняется условие?

Спасибо.

Проблема заключается в том, ставлю ли я условный или нет .. Timer1_Tick () всегда обновляет панель обновления. В коде позади

    protected void Timer1_Tick(object sender, EventArgs e)
{

    if (All_Panel.Enabled)
    {
        SQL DB = new SQL();
        if (DB.IsCustomerOnline())
        {
            SessionID = DB.GetSessionID();
            if (SessionID.CompareTo("") != 0)
            {
                if (!C_BT_Message.Enabled)
                {
                    DB.AddNewMessage(Request.UserHostAddress, "Connected Customer: " + SessionID, SessionID, "Admin");
                    C_BT_Message.Enabled = true;
                }
            }
            else
            {
                C_BT_Message.Enabled = false;
            }
        }
        List<string> li = DB.GetMessages(DB.GetSessionID());

        if (TotalRow != li.Count && li.Count > 0)
        {
            try
            {
                foreach (string s in li)
                {
                    // CreateDiv(s, "ForUser");

                    CreateDiv(GetDate(s) + "<br />" + GetMessage(s), GetIdentity(s).CompareTo("Customer") == 0 ? "ForUser" : "ForAdmin");
                }
            }
            catch (Exception err)
            {

            }
        }
        TotalRow = li.Count;
    }

}

Ниже aspx.

          <asp:Timer ID="Timer1" runat="server" Interval="3000"  OnTick="Timer1_Tick"></asp:Timer>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
     <Triggers>
     <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
     </Triggers>
      <ContentTemplate>
       <div id="chat_box" runat="server" class="C_chat">
        <div id="C_ChatAdmin" runat="server" class ="C_ChatMessage">

        </div>
       </div>
      </ContentTemplate>

 </asp:UpdatePanel>

1 Ответ

0 голосов
/ 12 мая 2018

На самом деле я понял это. Я сделал фиктивную панель обновления. Это невидимо. Я положил курок в нем. И вызывает другую панель обновления, если условие выполняется путем updatepanel.update (). Проблема с этим как-то сейчас есть. Он очищает все мои данные на панели, ждет 2 секунды, а затем снова заполняется. Мне действительно нужно как-то сохранить состояние моего предыдущего добавленного div в C_chatAdmin. Как-то включить viewstasta. Но динамически добавленные элементы управления являются основой моего исследования. Они пополняются каждый раз.

Страница 2 секунды очищается, а затем снова заполняется - моя главная проблема сейчас.

...