fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
2 minut

MS Ajax w Chrome (2) – metoda HttpModule


13.02.2009

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:

<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.

0 0 votes
Article Rating
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
PeGie
PeGie
15 years ago

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

Procent
15 years ago

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

Roman Jendrusz
15 years ago

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

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również