HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Weblap egy részletének újratöltése időzítve


Példaprogram letöltése

16849 bájt

Összetett Web-alkalmazások fejlesztésekor szükség lehet arra, hogy a weblapon található információknak csak egy részlete, az összterület egy szegmense frissüljön, és emiatt ne kelljen újratölteni az egész oldalt, mely gyakori frissítés esetén zavaró is lehet. Cikkünkben bemutatjuk, hogyan is lehetséges ez anélkül, hogy az egész lap újratöltődne, vagyis a kérés feleslegesen foglalná a szerver erőforrásait.

A mellékelt példa megnyitása előtt szükséges egy FrameFreshing nevű virtuális könyvtár létrehozása, mely a példa mappájában található Service alkönyvtárra mutat. Ehhez nyissa meg a mappa Tulajdonság ablakát, és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A mellékelt példában két WebForm-ot tartalmaz a Web-alkalmazás. A WebForm1.aspx lap tartalmazza a WebForm2.aspx lapot úgy, hogy ez utóbbi az első egy szegmensébe töltődik be.
A megoldás két részből áll. Elsőként meg kell oldanunk, hogy a WebForm2.aspx lap egy részét képezze a WebForm1.aspx lapnak. Erre kínál megoldást az <IFRAME>, melynek SRC attribútumában lehet megadni, hogy milyen forrás szolgálja ki a kontrolt, valamint megadhatjuk a kontrol méreteit is a STYLE attribútumban.
<iframe width="350" height="100" src="WebForm2.aspx" style="Z-INDEX: 101; LEFT: 29px; WIDTH: 350px; POSITION: absolute; TOP: 78px; HEIGHT: 100px" frameborder="0" scrolling="no">
</iframe>
A második lépés, hogy a betöltődő WebForm2.aspx lap bizonyos időközönként újra betöltődjön. Ennek érdekében létrehoztunk egy PostBackControl nevű kontrolt.
A kontrolhoz deklarált Designer osztályban adtuk meg, hogyan nézzen ki kontrolunk szerkesztési időben.
A kontrol létrehozásához a következőket kell tennünk: először is a kontrolt a Control osztályból származtatjuk, valamint implementálnunk kell az IPostBackEventHandler interfész tulajdonságait is.
[Designer(typeof(Designer))]
public class PostBackControl : Control, IPostBackEventHandler
{
Deklarálunk három változót, melyeket a property-ken keresztül állíthatunk be. Ezekkel engedélyezzük a kontrolunkat, valamint megadhatjuk az intervallumot:
  private int interval = 5000;
  private bool enabled = true;
  private bool enableViewState = true; 
A változókat állító property-k pedig:
  public int Interval
  {
    get
    {
      return interval;
    }
    set
    {
      interval = value;
    }
  }
Az engedélyezésekhez:
  public bool Enabled
  {
    get
    {
      return enabled;
    }
    set
    {
      enabled = value;
    }
  }  
Megadunk egy eseményt a kontrolhoz:
  public event EventHandler Do;
Megadjuk, hogy amikor a kérés a szerverhez ér, a deklarált esemény következzen be:
  public  void RaisePostBackEvent(string eventArgument)
  {
    OnDo(new EventArgs());
  }
Készítünk egy alapértelmezett kezelőt az eseményhez:
  public void OnDo(EventArgs ea)
  {
    if (Do != null)
    {
      Do(this, ea);
    }
  }
A kontrol „megjelenítésekor” egy JavaScript-et helyezünk el a lapon, mely meghívja a window objektum setTimeout metódusát.
  protected override void Render(HtmlTextWriter output)
  {
    if (enabled)
    {
      StringBuilder sb = new StringBuilder();
      sb.Append("\n<script language=\"javascript\">\n");
      sb.Append("    setTimeout(\"");
sb.Append(base.Page.GetPostBackEventReference(this));
      sb.Append("\", ");
      sb.Append(interval.ToString());
      sb.Append(");\n</script>");
      output.Write(sb.ToString());
    }
  }
}
A setTimeout metódus paraméterében kell megadni, hogy milyen metódust kell végrehajtani a második paraméter értékének megfelelő időközönként. A meghívandó metódus a Page osztály GetPostBackEventReference függvényének visszatérési értéke, a __doPostBack('PostBackControl1',''), mely megvalósítja a PostBack eseményt. A GetPostBackEventReference által generált kód:
<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" />
<script language="javascript">
<!--
  function __doPostBack(eventTarget, eventArgument) {
    var theform = document.Form1;
    theform.__EVENTTARGET.value = eventTarget;
    theform.__EVENTARGUMENT.value = eventArgument;
    theform.submit();
  }
// -->
</script>
A window objektum setTimeout függvénye a következőképpen jelenik meg a WebForm2.aspx lap kódjában, a kontrol Render metódusa jóvoltából:
<script language="javascript">
  setTimeout("__doPostBack('PostBackControl1','')", 5000);
</script>
Felhasználása előtt a kontrolt fel kell tenni a ToolBox-ra a szokásos módon: kattintsunk a ToolBox valamely lapján az egér jobb gombjával, majd a megjelenő menüből válasszuk ki a Customize ToolBox pontot, a megjelenő ablakban a .NET Frameworks Components fület. A Browse gombbal keressük elő az imént létrehozott .DLL-t.

Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 597. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |