Der klassische Microsoft- Baukasten für Webanwendungen. Entstanden als Nachfolger der VB-Script basierten Active Server Pages, bei denen
im Markup serverseitig auszuführender Code in speziellen Tags eingebettet wurde:
<p> <% Dim sum = 1 + 2 %> Summe = <% Dim sum = 1 + 2 %></p>
. Der serverseitige Code
wurde mittels untypisiertem VB-Script implementiert.
ASP.NET WebForms ist deutlich leistungsfähiger als sein Vorgänger, indem für die serverseitgen Implementierung streng typisierte .NET Sprachen wie C# oder VB.NET angeboten werden. Der serverseitige Code kann zudem in eine sog. code-behind Datei ausgelagert werden. Dabei wurde ein MV- Pattern wie in Windows Forms implementiert. Die Logik in der Code- Behind- Datei wird auch als Page- Controller bezeiichnet.
Seit 2009 entwickelt Microsoft das neue Framework ASP.NET MVC, welches dem Programmierer mehr Möglichkeiten und damit auch mehr Verantwortung in der clientseitigen Programmierung bietet. Erreicht wird dies durch Einsatz des MVC- Architekturmusters.
Die Verarbeitungsstufen eines Http- Request zum Http Response werden Pipeline genannt. Für ASP.NET MVC sind sie detailiert hier beschrieben.
Im Folgenden wird die Programmierung der einzelnen Stufen beschrieben.
Bei der Verarbeitung eines Requests feuert ein Controller eine Reihe von Events. Sie sind Erweiterungspunkte, um z.B. das allgemeine Verhalten eines Controllers beim Auftreten einer Exception zu definieren.
Einführung in Actionfilter- Programmierung
Alternativ zu den Events der Controller- Basisklasse kann der Entwickler mit Actionfilter den Aufruf einer Action vor und nachbereiten.
Für eine Action wird ein Actionfilter definiert, indem die Action mit einem speziellen Attribut ausgezeichnet wird.
Die Attriubute sind von der Basisklasse System.Web.Mvc.ActionFilterAttribute
abgeleitet.
Die Definition eigener Actionfilter durch ableiten von System.Web.Mvc.ActionFilterAttribute
ist möglich
(→ z.B. Klasse MvcTools.Actionfilter.MyLoggerActionFlt)
Für einzelne Actions werden Actionfilter aktiviert, indem die Actions mit ihnen attributiert werden:
[MvcTools.Actionfilter.MyLoggerActionFlt] public ActionResult Index() { return View(); }Wird mit einem Actionfilter statt einer einzelnen Action der gesamte Controller attributiert, dann werden alle Actions des Controllers vom Filter kontrolliert.
[HandleError(View = "~/Views/Errors/Err.cshtml")] public class CalcController : Controller { [MvcTools.Actionfilter.MyLoggerActionFlt] public ActionResult Index() { return View(); } //... }
AuthorizeAttribute
HandleErrorAttribut
OutputCacheAttribute
[Authorize] |
Nur angemeldete Benutzer dürfen diese Action aufrufen |
[Authorize(Roles="A, B")] |
Nur Benutzer, die zur Rolle A oder B gehören, dürfen die Action aufrufen. |
[AllowAnonymous] |
Alle Benutzer dürfen diese Action aufrufen |
Der Controller ist eine Klasse, die Methoden besitzt, welche mittels Routing über URL und HTTP- Requests von einem Webclient gestartet werden können. Diese Methoden werden Actions genannt. Eine Action verarbeitet den Requests:
public class DataCollection { [System.ComponentModel.DataAnnotations.Required(ErrorMessage= "X ist erforderlich")] [System.ComponentModel.DataAnnotations.Display(Name="X", Description= "z.B. Nr. od. Zeitpunkt der Messung")] public double newX { get; set; } [System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Y ist erforderlich")] [System.ComponentModel.DataAnnotations.Display(Name="Y", Description = "Messwert")] public double newY { get; set; } // ... }
public ActionResult AddValue(Models.StatCalcWithSessionState.DataCollection newData)
)
und nicht als einzelne Parameter (z.B. public ActionResult AddValue(double newX, double newY)
)HtmlHelper.ClientValidationEnabled = false;
/// Löscht einen Messwert /// Die Validierung wird unterbunden, um das Löschen auch bei unkorrekten Eingaben in den /// Eingabefeldern zu ermöglichen. [ValidateInput(false)] public ActionResult DelValue(int id) { Mem.Values.RemoveAt(id); return View("Index", Mem); }
→Einführung in die serverseitige RAZOR Scriptsprache für den Aufbau von Views.
Sollen Links auf Ressourcen der MVC- Anwendung in eine View eingebettet werden, dann setzt dies Wissen über den Host und den Anwendungsordner
voraus. Begint man einen URL in einem html Link mit der Tilde ~
, dann ersetzt RAZOR diese durch den Host und den Anwendungsordner
automatisch.
In manchen Fällen müssen URL's in einer View aufwendiger berechnet werden. Hier helfen dann folgende Funktionen:
Ein URL bestehe aus den Partikeln Schema://Host/Anwendungsordner/Pfad?Querystring#Fragment/Anker
Das Rendern Modelleigenschaften in HTML durch die Helper kann mittels partieller Views, Vorlagen genannt, beeinflusst werden, die in spezielle beannten Orndern untergebracht werden:
@* Allgemeine Vorlage für die Darstellung von double Werten. Negative Werte werden rot eingefärbt. *@ @model double <span style="color: @if (Model < 0) { <text>#FF0000;</text>} else { <text>#000000;</text> }"> @string.Format("{0:0.####}", Model) < /span>
@model String <div< <input type="text" id="@ViewData.ModelMetadata.PropertyName" name="@ViewData.ModelMetadata.PropertyName" value="@Model" class="form-control" /< </div<