ASP.Net — Невозможно изменить текст метки из события делегирования

#c# #asp.net #raspberry-pi

#c# #asp.net #raspberry-pi

Вопрос:

Привет, я пытаюсь создать единую HTML-страницу, которая отображает показания моего Raspberry Pi в режиме реального времени.

Отправляются данные, по которым запускается делегат.

Однако функция, которую запускает делегат, не может взаимодействовать с каким-либо элементом управления в моем ASP.Net Страница.

Вот как выглядит мой код:

 public partial class newIndex : System.Web.UI.Page
    {
        DataComms dataComms;

        public void commsDataReceive(string strData)
        {
            // This line is able to successfully print out the strData
            System.Diagnostics.Debug.WriteLine(strData);

            // This line doesn't throw an error but doesn't work
            Label1.Text = strData; 
        }

        private void InitComms()
        {
            dataComms = new DataComms();
            dataComms.dataReceiveEvent  = new DataComms.DataReceivedDelegate(commsDataReceive);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            InitComms();
        }

    }
 

Моя теория заключается в том, что после загрузки страницы я не могу вносить в нее какие-либо изменения динамически?? Итак, я могу решить это с помощью панели обновления, верно?

Ну, я тоже попробовал это, и это также не сработало, так как мне пришлось вызывать UpdatePanel1.Update() , который обращается к панели управления UpdatePanel.

Если кто-нибудь может помочь, я буду очень благодарен!

Ответ №1:

Страницы сервера не работают таким образом. Скорее всего, страница уже отправлена в браузер к моменту запуска commsDataReceive. Я думаю, у вас есть только один «клиент» для отображения этой информации, чтобы вы могли создавать dataComms как статические и обновлять код для последующего использования. Это, конечно, не лучшее решение, но оно должно соответствовать вашим требованиям

 public partial class newIndex : System.Web.UI.Page
    {
       static DataComms dataComms;
       static string lastData="";

        public void commsDataReceive(string strData)
        {
            // This line is able to successfully print out the strData
            System.Diagnostics.Debug.WriteLine(strData);

            // This line doesn't throw an error but doesn't work
            lastData = strData;
        }
 
        protected void Page_Load(object sender, EventArgs e)
        {
              if (dataComms != null)
              {
                 dataComms = new DataComms();
                 dataComms.dataReceiveEvent  = new DataComms.DataReceivedDelegate(commsDataReceive);
              }

            Label1.Text = lastData; 
        }

    }
 

Комментарии:

1. Привет, спасибо за ваш ответ! но разве это не означает, что мне придется обновить страницу, чтобы получить последние сохраненные данные? Я не хочу, чтобы метка обновлялась автоматически без обратной передачи, вот что я имел в виду real-time

2. в этом случае веб-сокеты — это то, что вы ищете. Если вы используете asp.net ядро, тогда это может помочь docs.microsoft.com/en-us/aspnet/core/fundamentals /…