Peter Bucher - Mein Experiment, meine Spielereien, meine Welt...   ·   Stefan Falz   ·   Jürgen Gutsch   ·   Golo Roden   ·   ASP.NET Zone   ·   Microsoft ASP.NET
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

HttpHandler der besonderen Art - Page Handler

HttpHandler wurden von mir hier im Blog schon einmal erläutert und ein zweites Mal aufgegriffen.

Es ist also möglich einen HttpHandler innerhalb eines Controls zu kapseln, das ist praktisch wenn
ein Control in sich geschlossen eine Möglichkeit hat, einen eigenen Handler aufzurufen.
Mit anderen Worten muss die Seite, die das Control konsumiert, keinen Handler in der Struktur haben,
sondern dieser ist im Control gekapselt.

Es gibt nicht extrem viele Situaionen wo dies erforderlich oder wünschenswert wäre, aber genau bei
diesen speziellen Anforderungen ist es doch toll, wenn es geht.

Wie schon zuvor angesprochen, implementiert die Klasse Page (System.Web.UI.Page) auch
die Schnittstelle IHttpHandler.
Da diese Klasse einen Handler darstellt, kann diese bzw. eine Ableitung davon ebenso Projektintern
als Code hinterlegt und in der web.config auf einen Alias, etc... registriert werden.

Das ergibt tolle Möglichkeiten.
So wäre es theoretisch denkbar, das eine ASP.NET Anwendung nur aus einer DLL besteht,
die alles enthält. (Ob das Sinn macht, ist wieder eine andere Frage :).

Ich habe ein kleines Beispielprojekt erstellt, das ihr hier herunterladen und euch ein Bild davon machen könnt.
Das Projekt enthält eine Web Application, ein Control Projekt mit einem Test Control und dem Page Handler.

Das Test Control zeigt mehrere TextBoxen an, die am Ende mit einem Link versehen sind, um ein Datum auszuwählen.
Dieser Link öffnet ein Popup und darin befindet sich der Ouput des Page Handlers, der einen Kalender ausgibt.

Folgend der Code des Page Handlers:

public class CalendarPageHandler : Page
{
    private string   _target;

    protected override void OnInit(EventArgs e) {
        base.OnInit(e);

        this._target  = Request.QueryString["target"].ToString() ?? String.Empty;

        HtmlForm form = new HtmlForm();
        form.ID       = "myForm";
        this.Controls.Add(form);

        Calendar calendar   = new Calendar();
        calendar.ID         = "myCalendar";
        calendar.DayRender += new DayRenderEventHandler(calendar_DayRender);
        form.Controls.Add(calendar);
    }

    void  calendar_DayRender(object sender, DayRenderEventArgs e)
    {
        e.Cell.Controls.Clear();
        HyperLink h   = new HyperLink();
        h.ID          = "dayHyperlink";
        h.Text        = e.Day.DayNumberText;
        h.NavigateUrl = String.Format("BLOCKED SCRIPT window.opener.document.getElementById('{0}').value = '{1}'; self.close();",
                                      this._target, e.Day.Date.ToShortDateString());
        e.Cell.Controls.Add(h);
    }

    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
       

    }
}
Veröffentlicht Montag, 4. Februar 2008 20:09 von Peter Bucher

Kommentare

# Basic Authentication mit ASP.NET

Möglichkeiten der Authentifizierung mit ASP.NET Mit ASP.NET gibt es verschiedene Möglichkeiten,

Freitag, 17. Oktober 2008 14:55 by Peter Bucher

# Was ist eigentlich ASP.NET?

Nach dem letzten Treffen des .NET-Stammtisch Konstanz-Kreuzlingen standen Peter , Thomas Huber und ich

Freitag, 17. April 2009 14:27 by Jürgen Gutsch
Anonyme Kommentare sind nicht zugelassen