Wie schon an allen bekannten Ecken der Community angekündigt, ist ab sofort eine Preview des ASP.NET MVC V2 Frameworks verfügbar
Mein Liebling-Neues-Feature, dass besonders hilfreich ist und auf jeden Fall zu “besserem” Code führt, weil untypisierte Strings eliminiert werden und Fehler zur Kompilierzeit erkannt werden sind “Strongly Typed UI Helpers”…also Stark-Typisierte UI Helper.
1: Html.EditorFor(model => model.Name);
In Preview 1 sind bereits Html.EditorFor(), Html.LabelFor() und Html.DisplayFor() enthalten. In der bekannten MVC Futures Assembly, welche lt. Scott Guthrie’s Blog Artikel noch diese Woche upgedated wird, sind dann noch Html.TextBoxFor(), Html.TextAreaFor(), Html.DropDownListFor(), Html.HiddenFor(), und Html.ValidationMessageFor() zusätzlich enthalten. Wie man im Code Snippet sieht, kann nun mittels Lambda Expressions (welche sich auf das Model der View beziehen) anstatt mit “dummen” strings gearbeitet werden. Je nach Datentyp, erzeugt Html.EditorFor() ein passendes <input> Element, also für Strings –> <Input type=”text”> etc.
Html.EditorFor() kann aber auch mit komplexen Datentypen umgehen
1: Html.EditorFor(model => model);
Dieser Aufruf erzeugt dann <input> Controls für alle Properties dies View Models. Um die Ausgabe zu kontrollieren, können die Properties mit dem Attribut [DisplayName] und [ScaffoldingColumn] dekoriert werden. [ScaffoldingColumn(false)] überspringt das entsprechende Property beim erzeugen des HTML Markups.
Weiters können eigene Templates erzeugt werden um die Ausgabe bestimmter Klassen / Datentypen komplett selbst zu kontrollieren. Unter /Views/Shared/EditorTemplates können diese abgelegt werden. Ein Template names DateTime.ascx würde zb. beim Aufruf von Html.EditorFor(startDate) die Darstellung übernehmen.
Alternativ kann man anstatt über den Datentyp auch einfach ein Template mit dem Namen ansprechen.
1: Html.EditorFor(customer => customerAddress, "AddressEditor);
Alternativ, damit man nicht in jeder View das Template über den Namen angeben muss kann einfach das entsprechende Property mit dem Attribut [UIHint] dekorieren und hat so die Zuordnung nur an genau einem Platz defininert.
1: public class Customer
2: {
3: [UIHint("AddressEditor")]
4: public Address Address{ get; set; }
5: }
Ein weiteres wichtiges neues Feature ist die Validierung mittels DataAnnotations, eine Einführung ist auf MSDN zu finden
Die komplette Liste der neuen Features kann man in den ReleaseNotes zu ASP.NET MVC V2 Preview nachlesen.
How to: Validate Model Data Using DataAnnotations Attributes
ASP.NET MVC Framework V2 - Release Notes