Automatisk uppdatering i webklienten med Ajax

Hjälp med plugins, tillägg (exempelvis webbtillägget) och exempelkod som inte ingår i Switch Kings officiella installationspaket
Forum rules
För att kunna hjälpa dig med supportfrågor behöver vi så mycket information som möjligt.
Innan du skapar en ny tråd, läs gärna:
viewtopic.php?f=10&t=20
standers67
1 star
1 star
Posts: 9
Joined: Sun 13 Feb 2011, 10:26

Automatisk uppdatering i webklienten med Ajax

Post by standers67 » Sun 20 Feb 2011, 21:33

Hej,

Håller på att pyssla med ett web-GUI där jag utgår från version 0.9, som är anpassat till en billig Androidplatta.. Allting fungerar fint och jag tror att det kommer att bli bra. Däremot får jag inte gränssnittet att uppdateras automatiskt när en lampa exempelvis går från tänd till släckt enligt schemat.. Det krävs att jag uppdaterar sidan manuellt.

Jag ser att koden är helt förberedd för att det skall ske uppdateringar automatiskt med Ajaxfunktioner. Problemet verkar ligga på en nivå som är lite utanför vad jag pysslar med normalt så jag hoppas att någon kan tipsa om vad som är fel.

Problet verkar ligga i den här koden i default.asp.cs

Code: Select all

    protected void Timer_Tick(object sender, EventArgs e)
    {
        for (int i = 0; i < pnlUpdate.Controls[0].Controls.Count; i++)
        {
            if (pnlUpdate.Controls[0].Controls[i] is DeviceControl)
            {
                DeviceControl dc = (DeviceControl)pnlUpdate.Controls[0].Controls[i];
                dc.Timer_Tick(sender, e);
            }
        }
    }
Jag har kört applikationen i VS2010 och kan se att det aldrig är så att villkoret i if-satsen uppfylls. Det verkar som att den inte ser User Controllen DeviceControl som en kontroll av den typen.. Jag får grå hår av det här, kan någon lista ut vad som är problemet? Eftersom koden finns där så borde det ju ha fungerat vid något tillfälle?

Mycket tacksam för alla tips

/ Stefan

Martin
Administrator
Administrator
Posts: 2655
Joined: Tue 09 Nov 2010, 20:25

Re: Automatisk uppdatering i webklienten med Ajax

Post by Martin » Sun 20 Feb 2011, 21:46

I 0.9 (har jag för mig) av webbtillägget lades det till en del som gör att man kan sätta upp prefix för ikoner som används. Det är nog så att just Timer_Tick-funktionen inte anpassats för det tillägget.
DeviceControl gömmer sig nämligen, efter den förändringen, ytterligare en nivå ner.

Jag kan tänka mig, utan att ha testkört, att det bör vara:

Code: Select all

if (pnlUpdate.Controls[0].Controls[i].Controls.Count == 1 && pnlUpdate.Controls[0].Controls[i].Controls[0] is DeviceControl)
{
   DeviceControl dc = (DeviceControl)pnlUpdate.Controls[0].Controls[i].Controls[0];

   dc.Timer_Tick(sender, e);
}
Martin | Switch King

standers67
1 star
1 star
Posts: 9
Joined: Sun 13 Feb 2011, 10:26

Re: Automatisk uppdatering i webklienten med Ajax

Post by standers67 » Mon 21 Feb 2011, 10:50

Stort tack för din snabba respons, jag skall kika vidare på detta ikväll!

/ Stefan

bunker
3 stars
3 stars
Posts: 130
Joined: Thu 23 Dec 2010, 11:26

Automatisk uppdatering i webklienten med Ajax

Post by bunker » Fri 25 Feb 2011, 07:05

standers67 wrote: Jag ser att koden är helt förberedd för att det skall ske uppdateringar automatiskt med Ajaxfunktioner.
Var ser man anpassningen till Ajax? Jag är relativ nybörjare till asp.net men har webbutvecklat en del. Så vitt jag kunnat se finns det ingen Ajax alla i sidorna, bara asp.net:s uppdateringsmodell som jag ärligt talat tycker fungerar ointuitivt och klumpigt eftersom den laddar om hela sidan. Av bl.a det skälet har jag f.n helt övergett vidareutveckling av web-gui:t.

standers67
1 star
1 star
Posts: 9
Joined: Sun 13 Feb 2011, 10:26

Re: Automatisk uppdatering i webklienten med Ajax

Post by standers67 » Mon 28 Feb 2011, 00:01

bunker wrote:
standers67 wrote: Jag ser att koden är helt förberedd för att det skall ske uppdateringar automatiskt med Ajaxfunktioner.
Var ser man anpassningen till Ajax? Jag är relativ nybörjare till asp.net men har webbutvecklat en del. Så vitt jag kunnat se finns det ingen Ajax alla i sidorna, bara asp.net:s uppdateringsmodell som jag ärligt talat tycker fungerar ointuitivt och klumpigt eftersom den laddar om hela sidan. Av bl.a det skälet har jag f.n helt övergett vidareutveckling av web-gui:t.
Hej,

Jag måste erkänna att jag är väldigt grön på Ajaxbiten. Har kodat en hel del i både gammal ASP och .Net, men just Ajax är jag inte så bekant med.

Det finns ju i exempelkoden en updatepanel där kontrollerna ligger, det finns också en timerkontroll som triggar ett anrop till en funktion var tionde sekund. Tanken verkar vara att den funktionen loopar genom alla kontroller av typen DeviceControl på sidan och uppdaterar deras status.

Det hade räckt fint för det jag behöver, men det fungerar tyvärr inte. I den koden som jag har utgått ifrån så är delar av den här koden bortkommenterad så jag misstänker att det har varit något som inte är helt klart.

Problemet verkar som sagt vara att inga element i update panelen identifieras som en DeviceControl (if-satsen nedan..)

Code: Select all

    protected void Timer_Tick(object sender, EventArgs e)
    {
        for (int i = 0; i < pnlUpdate.Controls[0].Controls.Count; i++)
        {
            if (pnlUpdate.Controls[0].Controls[i] is DeviceControl)
            {
                DeviceControl dc = (DeviceControl)pnlUpdate.Controls[0].Controls[i];
                dc.Timer_Tick(sender, e);
            }
        }
    }
Är det någon som är en fena på hur det här fungerar, som skulle kunna gissa vad problemet beror på?
Hade ju varit snyggt att få det här att funka
/ Stefan

standers67
1 star
1 star
Posts: 9
Joined: Sun 13 Feb 2011, 10:26

Re: Automatisk uppdatering i webklienten med Ajax

Post by standers67 » Mon 28 Feb 2011, 00:14

BINGO!

Så här verkar det att fungera hela vägen...

Code: Select all

        if (pnlUpdate.Controls[0].Controls[i].Controls.Count==3 && pnlUpdate.Controls[0].Controls[i].Controls[1] is DeviceControl)
Nu verkar uppdateringarna av kontrollerna att fungera...

/Stefan

Martin
Administrator
Administrator
Posts: 2655
Joined: Tue 09 Nov 2010, 20:25

Re: Automatisk uppdatering i webklienten med Ajax

Post by Martin » Mon 28 Feb 2011, 09:18

bunker wrote:
standers67 wrote: Jag ser att koden är helt förberedd för att det skall ske uppdateringar automatiskt med Ajaxfunktioner.
Var ser man anpassningen till Ajax? Jag är relativ nybörjare till asp.net men har webbutvecklat en del. Så vitt jag kunnat se finns det ingen Ajax alla i sidorna, bara asp.net:s uppdateringsmodell som jag ärligt talat tycker fungerar ointuitivt och klumpigt eftersom den laddar om hela sidan. Av bl.a det skälet har jag f.n helt övergett vidareutveckling av web-gui:t.
Den (äldre) uppdateringsmodell som ASP.Net använder som standard bygger, precis som du säger, på att hela sidan postas om. Där är inte Ajax inblandat alls.

När Microsoft anammade Ajax dök det upp "UpdatePanels" och det är dessa som webbtillägget använder sig av. En kontroll knyts till en UpdatePanel och det är bara de kontroller som ligger kopplade till en sådan panel som kan uppdateras på Ajax-manér. Webbtillägget använder alltså Ajax och laddar bara om de kontroller som behöver laddas om, men du ser inte mycket av Ajax-koden när du tittar på själva koden för sidan eftersom den genereras av Microsofts ramverk on-the-fly.
standers67 wrote:Nu verkar uppdateringarna av kontrollerna att fungera...
Bra där! Min gissning var inte riktigt korrekt, men du lyckades ju plocka fram det ändå... Kanon!

Edit: Bytte trådkategori
Martin | Switch King

Rauna
2 stars
2 stars
Posts: 27
Joined: Mon 14 Feb 2011, 21:51

Re: Automatisk uppdatering i webklienten med Ajax

Post by Rauna » Mon 28 Feb 2011, 17:16

Perfekt.

Men jag har ett annat problem, jag har flera lampor med samma DeviceName, om jag ändrar status på en så ändras inte status på de andra med samma DeviceName, utan jag måste då göra en manuell uppdatering av hela sidan för att statusen på de övriga med samma DeviceName ska ändras, går det att lösa också ?

Tack för ett super program

Martin
Administrator
Administrator
Posts: 2655
Joined: Tue 09 Nov 2010, 20:25

Re: Automatisk uppdatering i webklienten med Ajax

Post by Martin » Mon 28 Feb 2011, 20:03

Rauna wrote:Men jag har ett annat problem, jag har flera lampor med samma DeviceName, om jag ändrar status på en så ändras inte status på de andra med samma DeviceName, utan jag måste då göra en manuell uppdatering av hela sidan för att statusen på de övriga med samma DeviceName ska ändras, går det att lösa också ?
I sidan Default.aspx så har du skrivit DeviceName="Enhetens namn". Du kan, istället för DeviceName, använda DeviceID="EnhetensID".

Dock måste du lista ut ID:t på enheten genom att exempelvis gå via REST-anropen: http://serversIP:8800/devices
Martin | Switch King

Rauna
2 stars
2 stars
Posts: 27
Joined: Mon 14 Feb 2011, 21:51

Re: Automatisk uppdatering i webklienten med Ajax

Post by Rauna » Mon 28 Feb 2011, 22:07

Ok.

Jag har testat detta men det blir ingen skillnad, det är bara en som fortfarande ändrar status.

Tack för hjälpen

Post Reply

Who is online

Users browsing this forum: No registered users and 5 guests