Erweiterte Programmierthemen: ASP.NET WebForms

ASP.NET WebFormsASP.NET (Active Server Pages) dient zusammen mit einer .NET-Programmiersprache (also C# oder Visual Basic) als serverseitige Programmiersprache für Webseiten. ASP.NET fungiert hierbei als Konkurrenz zu PHP, welches mit über 80 % jedoch einen deutlich höheren Anteil hat. Zumeist wird der Komponente WebForms für die Entwicklung von Webseiten mit ASP.NET verwendet. Als Grundlage für die Entwicklung von Webseiten mit ASP.NET sind Vorkenntnisse in HTML und CSS nötigt. JavaScript-Kenntnisse sind ebenfalls von Vorteil. Falls Sie an diesen Programmiersprachen Interesse haben, schauen Sie mal auf der Webseite http://www.homepage-webhilfe.de/ vorbei. Vorteil von ASP.NET ist die große Komplexität der Klassen des .NET-Frameworks. Als Nachteil ist zu nennen, dass ASP.NET (aktuell) nur auf Windows Servern läuft und somit auf Grund der hohen Lizenzgebühren die Hosting-Angebote teuer sind.
In Visual Studio kann ein ASP.NET-Projekt erstellt werden, indem „ASP.NET-WebForms-Anwendung“ gewählt wird. Beim Ausführen des Programms über Visual Studio wird die Webseite mit Hilfe von IIS Express gehostet und im Standardbrowser geöffnet. Die Datei Default.aspx stellt die Indexdatei dar. Weitere Seiten können ebenfalls mit Visual Studio erstellt werden. Bei der Datei Default.aspx.cs handelt es sich um die sogenannte Code-Behind-Datei. Die Default.aspx.designer.cs-Datei wird automatisch durch die Änderungen an der Default.aspx-Datei generiert. Grundsätzlich sieht die .aspx-Datei nicht viel anders als ein klassisches HTML-Dokument aus. Über die Tags <% und %> können wir eine oder mehrere C#-Anweisung(en) notieren. Dies dient zumeist zur dynamischen Ausgabe. Hierfür müssen wir die statische Funktion Wirte() der Response-Klasse aufrufen.
Alle Elemente im HTML-Code können mit dem Attribut runat und dem Wert server versehen werden. Dadurch wird in der .aspx.designer.cs eine Variable für das Element erstellt (erfordert jedoch, dass das Attribut id gesetzt ist). Darüber können wir dann im C#-Code auf ein HTML-Element zugreifen, wie wenn es eine Variable wäre. Einige weitere Steuerelemente des ASP.NET-Frameworks können über den Namensraum asp bezogen werden. Einige dieser Steuerelemente sind zwar auch über die input-Elemente von HTML realisierbar, erlauben jedoch die Rückmeldung mit Ereignissen (sogenannte Postbacks). Umgesetzt wird diese Technik über AJAX, bei welcher durch ein JavaScript-Code eine Anfrage an den Server gesendet wird und dadurch die Seite neu geladen wird. Die Eigenschaft RequestType der Request-Klasse enthält eine Zeichenkette, die die Request-Art (zumeist GET oder POST) enthält. Bei einer GET- oder POST-Anfrage, bei welcher Formular-Daten übertragen werden, können wir über das Array Form und den Key (Zeichenkette als Name) den Wert eines Eingabefelds abfragen. Der Wert IsPostBack gibt an, ob die Anfrage über ein Postback (also mit einem Ereignis eines Steuerelements) ausgeführt wurde. Ein wichtiges Ereignis, welches nicht registriert werden muss, ist das Load-Event. Dieses wird beim Laden der Seite ausgeführt. Auf den Webserver müssen alle .aspx-Dateien sowie der Ordner „bin“ mit der .dll-Datei kopiert werden.

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CSV20.ASP_NET_WebForms.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title><% Response.Write(sTitle); %></title>
    </head>
    <body>
        <!-- Dieser Kommentar wird an den Browser gesendet! -->
        <% /* Dieser Kommentar wird nicht an den Browser gesendet! */  %>
        <h1><% Response.Write(sTitle); %></h1>
        <p><% Response.Write(sBeschreibung); %></p>
        <br />
        <form action="Default.aspx" method="post">
            <table>
                <tr>
                    <th colspan="2" style="text-align: center;">Formular 1 <i>(klassiches HTML)</i>:</th>
                </tr>
                <tr>
                    <td>Vorname:</td>
                    <!-- durch das setzen des id- und runat-Attributs wird automatisch das name-Attribut mit dem Wert des id-Attributs gefüllt -->
                    <td><input type="text" size="40" id="inputTextVorname" runat="server" /></td>
                </tr>
                <tr>
                    <td>Nachname:</td>
                    <td><input type="text" size="40" id="inputTextNachname" runat="server" /></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" name="inputSubmit1" value="Formular senden" /><span id="formPost1" runat="server"></span></td>
                </tr>
            </table>
        </form>
        <br />
        <form action="Default.aspx" method="post" runat="server">
            <table>
                <tr>
                    <th colspan="2" style="text-align: center;">Formular 2 <i>(ASP.NET Controls)</i>:</th>
                </tr>
                <tr>
                    <td>Kalender:</td>
                    <td><asp:Calendar ID="inputKalender" runat="server" Width="250px" /></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" name="inputSubmit2" value="Formular senden" /><span id="formPost2" runat="server"></span></td>
                </tr>
            </table>
        </form>
        <hr style="margin: 5px;" />
        <i>
            <b><% Response.Write(DateTime.Now.ToLongDateString() + " - " + DateTime.Now.ToLongTimeString()); %></b>
            <br />
            <span>Besucheranzahl: <% Response.Write(BesucherAnzahl()); %></span>
        </i>
    </body>
</html>

Default.aspx.cs
using System;
using System.Web.UI;

namespace CSV20.ASP_NET_WebForms
{
    public partial class Default : Page
    {
        public const string sTitle = "C# ASP.NET WebForms Anwendung";
        public const string sBeschreibung = "Dies ist unsere eigene Webseite mit C# ASP.NET WebForms. Der Vorteil von " + 
                                            "ASP.NET im Vergleich zu PHP ist, dass wir relativ einfach eine dynamische " + 
                                            "Webseite bauen können. Hierbei kooperiert die HTML-Seite ohne Probleme mit " + 
                                            "der Code-Behind-Datei. Auf dem Webserver muss die .aspx-Datei und die dazugehörige " + 
                                            "von Visual Studio kompilierte DLL abgelegt werden.<br /><br />" + 
                                            "<i>Weitere Informationen entnehmen Sie bitte dem Kapitel 14 Thema 7 auf der " + 
                                            "Webseite von \"Das große Computer ABC\" ...</i>";

        private static int iBesucherZaehler = 0;        // wichtig ist "static" -> hierdurch ist die Variable von allen Objekt-Erzeugungen
                                                        // der Klasse "Default" und somit von jedem Webseiten-Aufruf zugreifbar

        protected void Page_Load(object sender, EventArgs e)
        {
            // Formular-Info-Text zurücksetzen
            formPost1.InnerHtml = formPost2.InnerHtml = "";
            
            // prüfen ob Seite auf Grund eines "Post-Back" geladen wurde (z. B. beim Klicken auf den Kalender)
            //  --> in diesem Fall Besucherzähler nicht hochzählen
            if (!Page.IsPostBack)
                iBesucherZaehler++;
            if (Request.RequestType == "POST")
            {
                if (Request.Form["inputSubmit1"] != null)
                {
                    if (Request.Form["inputTextVorname"] != null && Request.Form["inputTextNachname"] != null)
                    {
                        inputTextVorname.Value = Request.Form["inputTextVorname"];
                        inputTextNachname.Value = Request.Form["inputTextNachname"];
                        formPost1.InnerHtml = "<br />Formular erfolgreich abgesendet!";
                    }
                    else
                        formPost1.InnerHtml = "<br />Formular fehlerhaft versendet!";
                }
                else if (Request.Form["inputSubmit2"] != null)
                {
                    // Abfrage wie if (Request.Form["inputKalender"] != null) trifft nie zu, da der Kalender immer durch die 
                    // Post-Backs übertragen werden und nicht über das Formular
                    formPost2.InnerHtml = "<br />Formular erfolgreich abgesendet!";
                    formPost2.InnerHtml += "<br />Ausgewähltes Datum: " + inputKalender.SelectedDate.ToShortDateString();
                }
            }
        }

        public string BesucherAnzahl()
        {
            return iBesucherZaehler.ToString();
        }
    }
}

Default.aspx.designer.cs
//------------------------------------------------------------------------------
// <automatisch generiert>
//     Der Code wurde von einem Tool generiert.
//
//     Änderungen an der Datei führen möglicherweise zu falschem Verhalten, und sie gehen verloren, wenn
//     der Code erneut generiert wird. 
// </automatisch generiert>
//------------------------------------------------------------------------------

namespace CSV20.ASP_NET_WebForms {
    
    
    public partial class Default {
        
        /// <summary>
        /// inputTextVorname-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.HtmlControls.HtmlInputText inputTextVorname;
        
        /// <summary>
        /// inputTextNachname-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.HtmlControls.HtmlInputText inputTextNachname;
        
        /// <summary>
        /// formPost1-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.HtmlControls.HtmlGenericControl formPost1;
        
        /// <summary>
        /// inputKalender-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.WebControls.Calendar inputKalender;
        
        /// <summary>
        /// formPost2-Steuerelement
        /// </summary>
        /// <remarks>
        /// Automatisch generiertes Feld
        /// Um dies zu ändern, verschieben Sie die Felddeklaration aus der Designerdatei in eine Code-Behind-Datei.
        /// </remarks>
        protected global::System.Web.UI.HtmlControls.HtmlGenericControl formPost2;
    }
}
Download

LinksRechts