MS Ajax w Chrome (2) - metoda HttpModule

13 lutego 2009 06:19 w kategorii: pro
Tagi: , ,

Nieznających tematu zapraszam do pierwszego odcinka po wyjaśnienia.


Odcinek drugi. Metoda HttpModule.

Mechanizm modułów HTTP pozwala nam wpiąć się w proces przetwarzania żądania przez serwer ASP.NET. Mając do dyspozycji całą masę zdarzeń udostępnianych przez klasę HttpApplication możemy zmodyfikować praktycznie dowolny element w łańcuchu obsługi żądania. W tym przypadku wykorzystamy możliwość dobrania się do docelowej strony i podczas zdarzenia Load zmodyfikujemy zawartego na niej ScriptManagera:

  1. implementujemy moduł realizujący wymaganą funkcjonalność (użyjemy metody AllChildControls(), którą przedstawiłem jakiś czas temu):
      1:  using System.Linq;
      2:  using System.Web;
      3:  using System.Web.UI;
      4:  
      5:  public class ScriptManagerWebKitModule : IHttpModule
      6:  {
      7:  	public void Init(HttpApplication context)
      8:  	{
      9:  		context.PreRequestHandlerExecute += context_PreRequestHandlerExecute;
     10:  	}
     11:  
     12:  	public void Dispose()
     13:  	{
     14:  		// nothing to do here...
     15:  	}
     16:  
     17:  	void context_PreRequestHandlerExecute(object sender, System.EventArgs e)
     18:  	{
     19:  		var page = ((HttpApplication)sender).Context.CurrentHandler as Page;
     20:  
     21:  		// we're only interested in Page handlers
     22:  		if (page != null)
     23:  			page.Load += page_Load;
     24:  	}
     25:  
     26:  	void page_Load(object sender, System.EventArgs e)
     27:  	{
     28:  		// only one ScriptManager per page is allowed
     29:  		ScriptManager scriptManager = ((Page)sender).AllChildControls().OfType<ScriptManager>().SingleOrDefault();
     30:  
     31:  		if (scriptManager != null)
     32:  		{
     33:  			ScriptReference scriptReference = new ScriptReference("~/Scripts/webkit.js");
     34:  			scriptManager.Scripts.Add(scriptReference);
     35:  		}
     36:  	}
     37:  }
    
  2. rejestrujemy moduł w sekcji system.web/httpmodules w web.config:
  3. <httpModules>
    <add name="WebKitModule" type="ScriptManagerWebKitModule, myWebApp, Version=1.0.0.0, Culture=neutral"/>

W ten oto sposób mamy działające rozwiązanie niewymagające ingerowania w już utworzone strony i bezmyślnego modyfikowania każdej instancji ScriptManagera z osobna.


Następnym razem osiągniemy to samo za pomocą mechanizmu Control Adapters.


Komentarze

PeGie

13 lutego 2009 18:14

Dzięki , na to czekałem. Na pewno się przyda

Procent

13 lutego 2009 19:04

Spoko, w pon/wt będzie lepsze rozwiązanie:)

Roman Jendrusz

18 lutego 2009 03:12

Mała rada. Zamiast wyszukiwania w kontrolkach obiektu typu ScriptManager, można skorzystać z metody statycznej ScriptManager.GetCurrent(page).

Maciej Aniserowicz

5 kwietnia 2010 09:41

Trackback from Maciej Aniserowicz

MS Ajax w Chrome (3) - metoda ControlAdapter

Komentarze zamknięte