Blokkolás aszinkron postback idejére

Beismerem, már a cím is elég visszás, hiszen az aszinkron postback, az Ajax egyik eredeti célja az volt, hogy a felhasználó kényelme érdekében a postback művelet a háttérben történjen, és ne blokkolja a felhasználói felületet. Ennek ellenére sajnos időnként mégis szükség van arra, hogy az Ajaxos hívás idejére letiltsunk bizonyos vezérlőket, vagy legalábbis a képernyő egyes részeit.

Ehhez nagyon hasznos segítség lehet a jQuery, amit biztosan nem kell bemutatni. Legjobban azt szeretem benne, hogy végtelen mennyiségű plugin érhető el hozzá, (bár egyben ez a hátránya is, gyakran a megfelelő plugin kiválasztása tovább tart, mint utána a beépítése az alkalmazásba), melyek közül a fenti feladatra nekem legjobban a jQuery BlockUI plugin vált be. A letölthető JavaScript fájl mindössze 16KB, de ha vesszük magunknak a fáradtságot és minimalizáljuk, akkor mindössze 7.59 KB-ot foglal, amit még a webszerver tovább tömöríthet, így a kliensnek máris csak 3.6KB-ot kell letölteni.

Ezt a plugint felhasználva a teljes ablakunk (amit itt a példában egy id=”main” attribútummal ellátott div valósít meg) blokkolása egy üzenettel, mellette egy forgó képpel, félig átlátszó szürke átfedéssel (overlay) és egy fehér, keretezett ablakkal középen mindössze ennyi:

  $("#main").block({
    message: ' <img src="progress.gif" /> Feldolgozás folyamatban...',
    css: { border: '1px solid black', width: '200px', padding: '20px', 
color: 'black', 'background-color': 'white' }, overlayCSS: { backgroundColor: '#f2f5f8', opacity: 0.9 } });

A blokkoló üzenet eltűntetése még egyszerűbb:

  $("#main").unblock();

Már csak arra van szükségünk, hogy ezeket a kódokat aszinkron postback esetén hívjuk meg. Szerencsére az ASP.NET Ajax Library PageRequestManager kliens oldali “osztálya” biztosít beginRequest és endRequest eseményeket, melyekre feliratkozhatunk:

  Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(function (sender, args) {
    // Blokkolás itt
  });

  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) {
    // Blokkolás feloldása itt
  }); 

Ennyi az egész, a kód mehet rögtön a master page tetejére a ScriptManager után, és máris minden oldalon meg fogjuk kapni a Feldolgozás folyamatban… üzenetet aszinkron művelet esetén.

Technorati-címkék: ,,,


Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2010.08.31. 21:25:23 | Permalink | Hozzászólások: 0 | Tárgyszavak: , , ,


  • Vista SP2 és Windows Server 2008 SP2 CPP

    Balássy György (MS RD, ASP.NET MVP, MCTS) Készül a Vista és a Windows Server 2008 második javítócsomagja, a fejlesztés most érkezett a nyilvános béta fázishoz. Érdemes kicsit előretekinteni, hogy mire is számíthatunk. Tovább »
  • Az IIS 7 konfigurációs fájljai

    Balássy György (MS RD, ASP.NET MVP, MCTS) Az Internet Information Services 6-hoz képest az IIS 7 konfigurációs rendszere teljesen megváltozott, a metabase-t a .NET platformon már megszokott XML formátumú konfigurációs fájlok váltották fel. Az IIS 7 szorosan összefonódik a .NET platformmal, a webszerver beállításai a .NET-es alkalmazások beállításaival azonos helyen tárolódnak. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások