【问题标题】:Button border is still blue when clicked and timer refreshed ASP .NET单击并刷新计时器时,按钮边框仍为蓝色 ASP .NET
【发布时间】:2012-11-16 06:33:02
【问题描述】:

我有按钮数组,每个边框颜色都表示某种状态(蓝色 = 活动按钮;绿色 = 普通按钮,红色 =“开火”)。每个按钮代表硬件上的一个传感器。

按钮位于某些 UpdatePanel 中,其中 Timer 设置为 1500ms 刷新。当计时器超时并被称为 Tick 事件时,页面加载事件被调用,我将颜色设置为按钮,因此着火的按钮设置为红色,正常的按钮设置为绿色,活动的按钮设置为蓝色。一切都很好,直到我单击某个调用单击事件的按钮,其中单击的按钮边框变为蓝色。我认为现在调用 Tick 事件时,这个单击的按钮现在应该失去蓝色边框颜色,并且它设置为默认绿色。但它保持蓝色,即使我把它放在火上(所以在下一个 Tick 事件之后它应该是红色的)它保持蓝色。有人可以帮忙解决这个问题吗?

 protected void Page_Load(object sender, EventArgs e)
    {
        //Here is condition which checks if is exist Session['ActiveSensor']
        if (Session["ActiveSensor"] == null)
        {
            Session.Add("ActiveSensor", "A1");
            Session.Add("LastActiveSensorIndex", "0");
        }
        //==================================================================
        Sensors = new SensorNetwork();
        sensor_buttons = new Button[Sensors.SensorNet.Length];
        int i = 0;
        foreach (Sensor sensor in Sensors.SensorNet)
        {
           sensor_buttons[i] = new Button();
            sensor_buttons[i].ID = Convert.ToString(i); 
            sensor_buttons[i].BackColor = sensor.Temperature.TemperatureColor;
            sensor_buttons[i].Text = Math.Round(sensor.Temperature.CelsiusTemperature, 2).ToString() + "°C";
            sensor_buttons[i].Click += new EventHandler(sensor_Click);
            sensor_buttons[i].BorderWidth=2;

            if (sensor.Valid == false)
            {
                sensor_buttons[i].Enabled = false;
            }
            else {
                sensor_buttons[i].Enabled = true;
            }
            if (sensor.Fire == true)
            {
                sensor_buttons[i].BorderColor = System.Drawing.Color.DarkRed;
            }
            else {
                sensor_buttons[i].BorderColor = System.Drawing.Color.ForestGreen;
            }

            if (sensor.SensorID == Session["ActiveSensor"].ToString() && sensor.Fire==false) {
                sensor_buttons[i].BorderColor = System.Drawing.Color.LightSkyBlue;
                Session.Add("LastActiveSensorIndex", i.ToString());   
            }

            UpdatePanel2.ContentTemplateContainer.Controls.Add(sensor_buttons[i]);
            i++;
        }
    }



protected void sensor_Click(object sender, EventArgs e)
    {
        var ClickedButton =(Button)sender;
        Sensor NewSensor=Sensors.SensorNet[Convert.ToInt32(ClickedButton.ID)];

        ClickedButton.BorderColor = System.Drawing.Color.LightSkyBlue; //This button stays blue even if the Tick is called
     }

【问题讨论】:

  • 您确定Page_Load 和sensor_click 是按照您认为的顺序调用的吗?
  • 如果我不点击按钮(它调用 sensor_click),那么一切都很好,直到我点击它(我将传感器设置为着火并且按钮被更改)。在该服务器忽略边界更改并始终返回蓝色(即使我将传感器设置为触发但它保持蓝色)之后。所以我认为这些事件的调用顺序正确。

标签: asp.net .net button timer border


【解决方案1】:

解决了,它保持蓝色的原因是所有按钮都得到了

sensor_buttons[i].EnableViewState = true;

这会导致服务器记住按钮的先前状态。

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2014-07-11
    • 1970-01-01
    • 2018-04-03
    • 2022-12-04
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多