Homepage-Webhilfe Event-Banner

Ansicht

Ansicht-Icon Nachdem wir uns im vorherigen Thema ausführlich mit der Steuerung beschäftigt haben, wollen wir uns nun der Ansicht (engl. view), also dem, was unsere Besucher nachher sehen, widmen. Eine Ansicht ist grundsätzlich mal nichts anderes als eine HTML-Datei. Die Datei kann HTML-Code sowie CSS- und JavaScript-Code enthalten. Um eine Verbindung zwischen der Anwendungslogik (dem Controller) und der Ansicht herzustellen, wird das Datenmodell verwendet. Mit dem Datenmodell wollen wir uns jedoch erst im nächsten Thema beschäftigen. Die dynamischen Inhalte werden mit Code-Blöcken eingebettet. Als Programmiersprache kommt C# (oder Visual Basic) zum Einsatz. Der Syntax unterscheidet sich dabei je nach gewähltem Ansichtsmodul. Alle Ansichten befinden sich im Ordner Views. Dabei besitzen die Ansichten standardmäßig den gleichen Namen wie die Aktion, welche die Ansicht verwendet, und befinden sich in einem Unterordner, welcher den gleichen Namen wie der jeweilige Controller trägt. Für Ansichten gibt es zwei unterschiedliche Ansichtsmodule (engl. view engine): ASPX und Razor. ASPX kennen Sie vom Syntax ja bereits vom ASP.NET WebForms Tutorial. Den Syntax von Razor haben wir im Thema Grundlagen erläutert und werden wir auch für alle weiteren Beispiele verwenden. Dateien mit dem Ansichtsmodul Razor besitzen die Dateiendung .cshtml.

Im folgenden Beispiel haben wir eine Steuerung (Home) mit der Aktionsmethode Index(), welche mittels der Funktion View() eine Ansicht zurückgibt. Die Ansicht, welche aus dem Verzeichnis Views/Home/Index.cshtml geladen wird, enthält ein HTML-Grundgerüst sowie die Ausgabe des aktuellen Datum und der aktuellen Uhrzeit (Zeile 16). Der erste Razor-Code-Block dient zum Setzen von ein paar Eigenschaften, welche die Seite betreffen. Standardmäßig, also beim Erstellen einer neuen Ansicht in Visual Studio, wird hier die Eigenschaft Layout auf null gesetzt, welche zum Festlegen der Layout-Seite verwendet wird, welche in diesem Beispiel nicht vorhanden ist.

Steuerung (HomeController.cs):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HWhBsp.Ansicht.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

Ansicht (Index.cshtml):

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
    <head>
        <title>Ansicht - ASP.NET Code-Beispiel</title>

        <meta charset="utf-8" />

        <meta name="robots" content="noindex,nofollow" />
        <meta name="publisher" content="Homepage-Webhilfe" />
    </head>

    <body>
        <b>Datum und Uhrzeit:</b> @DateTime.Now.ToString()
    </body>
</html>
VorschauDownload

Ansichten sind von der Klasse ViewPage (beim ASPX View Engine) oder WebViewPage (beim Razor View Engine) abgeleitet. Neben den Eigenschaften Request, Response und Session, welche Sie bereits von WebForms kennen, besitzen beide Klassen die Eigenschaft Html, welche eine Instanz der HtmlHelper-Klasse enthält. Die HtmlHelper-Klasse enthält einige Funktionen, welche uns, wie der Name schon sagt, helfen, HTML-Code zu erzeugen.

Mit der Methode ActionLink() können wir einen Link erzeugen, welcher auf einen Controller und eine Aktionsmethode verweist. Als Parameter wird der anzuzeigende Text sowie der Aktionsname und bei Bedarf der Name des Controllers übergeben. Der Controllername muss dabei nur übergeben werden, wenn der Link sich auf einen anderen Controller bezieht.

Um einen Link zu erzeugen, welcher es erlaubt, alle Routenparameter festzulegen, so verwenden wir üblicherweise die Funktion RouteLink(). Dieser werden als Übergabeparameter der anzuzeigende Linktext und die Routenwerte übergeben (meist in Form eines anonymen Objekts). Gibt es mehrere Routen, so muss der Funktion als weiterer Parameter (anzugeben zwischen Linktext und Routenwerte) der Name der Route übergeben werden. Mit diesem erfolgt dann die Zuordnung der Routenwerte zur Route und somit auch zum URL-Muster, welches in der Routenkonfiguration festgelegt ist.

Die HtmlHelper-Klasse wird aber auch vor allem dazu verwendet, um Formularfelder zu erstellen. Hierfür bietet die Klasse unter anderem die Methoden CheckBox(), DropDownList(), Hidden(), ListBox(), Password(), RadioButton(), TextArea() und TextBox() an, welche dazu gedacht sind, Kontrollkästchen, Auswahllisten mit Einfachauswahl, versteckte Eingabefelder, Auswahllisten mit Mehrfachauswahl, Eingabefelder für Passwörter, Auswahlgruppen, Textblöcke und „normale“ Eingabefelder zu erzeugen. Auf die genauen Parameter der Funktionen gehen wir hier nicht weiter ein, da dies den Umfang des Tutorials sprengen würde. Wenn Sie in Visual Studio entwickeln, wird Ihnen jedoch IntelliSense eine große Hilfe sein. Zudem ist die Parameterfolge größtenteils nachvollziehbar.

Steuerung (HomeController.cs):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HWhBsp.HTML_Ausgaben.Controllers
{
    public class HomeController : Controller
    {
        public enum KontaktPerson
        {
            Verkauf,
            Support,
            Verwaltung
        }

        public ActionResult Index()
        {
            return View();
        }

        public string ZweiteSeite()
        {
            return "Hallo Welt!";
        }
    }
}

Ansicht (Index.cshtml):

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
    <head>
        <title>HTML-Ausgaben - ASP.NET Code-Beispiel</title>

        <meta charset="utf-8" />

        <meta name="robots" content="noindex,nofollow" />
        <meta name="publisher" content="Homepage-Webhilfe" />
    </head>
    
    <body>
        <form method="post">
            <table>
                <tr>
                    <td><b>Anrede:</b></td>
                    <td>@Html.RadioButton("anrede", "herr", true) Herr&nbsp;&nbsp;&nbsp;@Html.RadioButton("anrede", "frau") Frau</td>
                </tr>
                <tr>
                    <td><b>Name:</b></td>
                    <td>@Html.TextBox("name")</td>
                </tr>
                <tr>
                    <td><b>Kontakt-Person:</b></td>
                    <td>@Html.DropDownList("grund", new SelectList(Enum.GetValues(typeof(HWhBsp.HTML_Ausgaben.Controllers.HomeController.KontaktPerson))))</td>
                </tr>
                <tr>
                    <td><b>Betreff:</b></td>
                    <td>@Html.TextBox("betreff")</td>
                </tr>
                <tr>
                    <td><b>Nachricht:</b></td>
                    <td>@Html.TextArea("betreff")</td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="Absenden" /></td>
                </tr>
            </table>
        </form>
        <br />
        @Html.ActionLink("Hier klicken um 2. Seite anzuzeigen ...", "ZweiteSeite")
    </body>
</html>
VorschauDownload

Normalerweise besitzt eine Website ein einheitliches und durchgängiges Layout und Design. Style-Regeln (i. d. R. CSS-Regeln) sind in den meisten Fällen in separaten Dateien notiert und werden mittels eines link-Elements eingebunden. Das „rohe“ Layout (also z. B. die verschiedenen div-Blöcke, welche den Seitenaufbau angeben) wird hingegen in HTML-Dateien notiert. Wenn es nun aber mehrere Ansichten gibt, wird dann dieses Layout mehrmals notiert? Grundsätzlich müsste dies so sein, da ja auf jeder Seite das Layout benötigt wird. Dies wäre jedoch unnötige Verschwendung von Speicherplatz und vor allem ein enormer Aufwand, wenn Sie z. B. das Layout ändern wollen. Um dieses Problem zu umgehen, haben Sie in ASP.NET WebForms die Technologie der Masterseiten kennengelernt. Für ASP.NET MVC-Anwendungen gibt es eine ähnliche Technologie, welche sich Layout-Seiten nennt.

Eine Layout-Seite befindet sich, nachdem diese erstellt wurde, ebenfalls im Ordner Views und beginnt im Namen in der Regel mit einem Unterstrich (z. B. _Layout.cshtml oder _LayoutPage.cshtml). Eine Layout-Seite kann dabei ebenfalls im ASPX- oder Razor-Syntax geschrieben werden. Die Verbindung zwischen Layout- und Inhaltsseite wird über die Eigenschaft ViewBag geschaffen. In dieser können nach belieben Eigenschaften „erzeugt“ werden und von der Layout- und Inhaltsseite verwendet werden. Die Layout-Seite verwendet die ViewBag-Eigenschaft zur Ausgabe von Inhalten in Form von Platzhaltern, wohingegen in der Inhaltsseite die Eigenschaften und somit die Platzhalter mit Inhalt gefüllt werden. Zudem wird in der Inhaltsseite über den Funktionsaufruf RenderBody() der Inhalt der Inhaltsseite in der Layout-Seite eingebettet. Um in einer Inhaltsseite die Referenz zu einer Layout-Seite festzulegen, wird die Eigenschaft Layout der Seite gesetzt.

Im folgenden Beispiel sehen Sie zwei Ansichten (Index und Seite2), wovon beide die Layout-Seite _LayoutPage verwenden. Die Inhaltsseiten unterscheiden sich dabei hauptsächlich vom Inhalt. Über die ViewBag-Eigenschaft werden zudem für jede Seite individuelle Titel sowie eine unterschiedliche Hintergrund-Farbe (zur Verdeutlichung des Beispiels) festgelegt.

Steuerung (HomeController.cs):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HWhBsp.Layout.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Seite2()
        {
            return View();
        }
    }
}

Layout-Seite (_LayoutPage.cshtml):

<!DOCTYPE html>
<html>
    <head>
        <title>@ViewBag.Title - Layout - ASP.NET Code-Beispiel</title>
    
        <meta charset="utf-8" />
    
        <meta name="robots" content="noindex,nofollow" />
        <meta name="publisher" content="Homepage-Webhilfe" />
    </head>
    
    <body>
        <div style="width: 600px; padding: 5px; background-color: @ViewBag.Farbe">
            <h1>@ViewBag.Title</h1>
            @RenderBody()
            <br /><br />
            <i>Copyright &copy; 2016 by Homepage-Webhilfe</i>
        </div>
    </body>
</html>

Ansicht (Index.cshtml):

@{
    ViewBag.Title = "Startseite";
    ViewBag.Farbe = "yellow";
    Layout = "~/Views/_LayoutPage.cshtml";
}
<p>...</p>
<p>...</p>
<br />
@Html.ActionLink("Zur Seite 2", "Seite2")

Ansicht (Seite2.cshtml):

@{
    ViewBag.Title = "Seite 2";
    ViewBag.Farbe = "orange";
    Layout = "~/Views/_LayoutPage.cshtml";
}
<p>...</p>
<p>...</p>
<p>...</p>
<br />
@Html.ActionLink("Zur Startseite", "Index")
VorschauDownload
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK