Benutzerdefinierte Validierung unter ASP.NET MVC 👍 👎

Sehr praktisch unter ASP.NET MVC sind Attribute zur Validierung in Models. Standardmäßig bietet das .NET-Framework im Namensraum System.ComponentModel.DataAnnotations beispielsweise die Attribute Range, Required und StringLength, deren Verwendung wohl selbsterklärend sein dürfte.

Manchmal benötigt man jedoch etwas speziellere Validierungen und möchte naheliegenderweise dennoch auf eine einheitliche Vorgehensweise setzen. Hierfür steht das (abstrakte) Attribut Validation zur Verfügung, von welchem wir eine konkrete Implementierung für unser Vorhaben ableiten können.

Für unser Beispiel möchten wir ein Attribut zur Validierung implementieren, welches angibt, dass ein Feld (üblicherweise indirekt aus einem Formular vom Benutzer befüllt) mindestens eine Ziffer, zwei Großbuchstaben und drei Kleinbuchstaben enthalten muss. Wir halten es bewusst einfach, um uns auf den Kontext zu konzentrieren:
Benutzerdefiniertes Attribut zur Validierung implementieren
010203040506070809101112131415161718
[AttributeUsage(AttributeTargets.Property)]public class PasswordAttribute : ValidationAttribute {    public override bool IsValid(object value) {        string val = value as string;
if(!String.IsNullOrWhiteSpace(val)) { return ( val.Count(c => Char.IsDigit(c)) >= 1 && val.Count(c => Char.IsUpper(c)) >= 2 && val.Count(c => Char.IsLower(c)) >= 3 ); } else { return false; } }}
Dies ist eine sehr grundlegende Implementierung, die sich durchaus noch erweitern (und optimieren) lässt. Grundsätzlich genügt dieses Vorgehen jedoch bereits, um Verwendung zu finden. Das Attribut wird dazu wie üblich über der entsprechenden Eigenschaft der Model-Klasse deklariert:
Benutzerdefiniertes Attribut zur Validierung verwenden
01020304050607
public class User {    [Password]    public string Password {        get;        set;    }}
Eine allgemeine Einführung zum MVC-Framework möchte ich gerne in einem späteren Beitrag liefern.

Farbcodes (Ergänzung) 👍 👎

Mein ehem. Ausbilder hat dem angedachten Gastbeitrag zugestimmt, ihr dürft also gespannt sein. Smiley: smiling

Als kleine Hilfe für die Praxis gibt es nun eine Seite benannter Farben mit zusätzlichen Informationen.

Datei per ASP.NET MVC ausliefern 👍 👎

Häufig möchte man auf seiner Webpräsenz nicht nur mit HTML-Ansichten arbeiten, sondern beispielsweise auch Dateien zum Herunterladen anbieten. Das ist selbstverständlich auch unter ASP.NET MVC kein Problem, sondern erfordert lediglich eine Aktion mit dem Rückgabetyp FileResult.

Hierbei handelt es sich jedoch um eine abstrakte (Basis-)Klasse, konkrete Implementierungen stehen mit FileContentResult, FilePathResult und FileStreamResult zur Verfügung. Wir begnügen uns mit einem minimalistischen Beispiel und verwenden FilePathResult – was soweit selbsterklärend sein dürfte:
Download-Aktion im Controller "Gallery"
01020304050607
public class GalleryController : Controller {    public FileResult Download() {        return new FilePathResult(@"X:\Pfad\zur\Datei\MeinBild.png", "image/png") {            FileDownloadName = "Bild.png"  // Dateiname für Benutzer festlegen        };    }}
Sofern FileDownloadName gesetzt wird, sollte der Browser die Datei automatisch zum Speichern anbieten, ansonsten greift das jeweilige Standardverhalten. Weitere Möglichkeiten bieten euch die bereits erwähnten anderen Implementierungen, natürlich könnt ihr auch jederzeit selbst welche für eure eigenen Bedürfnisse ableiten.

Lua-Dokumentation überarbeitet 👍 👎

Ich erlaube mir eine kleine Werbung in eigener Sache, da ich nach langer Zeit endlich die Gelegenheit hatte, die Übersetzung der Lua-Dokumentation – wie viele andere Projekte zuvor – von PHP auf ASP.NET MVC umzustellen.

Im Zuge dessen wurde einiges im Hintergrund optimiert, jedoch auch die Darstellung überarbeitet. Darüber hinaus werden nun insbesondere Querverweise auf andere Kapitel und Funktionen endlich (automatisch) verlinkt.

Inhaltlich werde ich an dieser Version wahrscheinlich nichts mehr bearbeiten. Da meine Zeit leider recht verplant ist, kann und möchte ich nicht versprechen, ob eine Übersetzung der aktuellen Dokumentation für v5.2 in absehbarer Zeit machbar ist. Ich hätte jedoch durchaus Interesse daran – evtl. finden sich ja noch Mitstreiter. Smiley: cool

In Kürze erscheinen hier auf jeden Fall auch wieder ein paar mehr Artikel zum Thema Softwareentwicklung.

Farbcodes 👍 👎

Ab dem 1. August haben wir in der Firma einen neuen Auszubildenden zum Fachinformatiker für Anwendungsentwicklung. Dieser hat vor Kurzem noch ein zweiwöchiges Praktikum bei uns absolviert und dabei auch einiges von mir erfahren (ich hoffe, er hat sich erholt Smiley: winking). Auf dem Plan stand auch das Thema Farbcodes, wie sie insbesondere im Webdesign auftreten und nun möchte ich hier ebenfalls ein paar Worte dazu verlieren.

Zuerst einmal muss klar sein, was eigentlich die theoretische Grundlage dieser Notation ist, um sinnvolle Aussagen treffen zu können. Wir besprechen hier den RGB-Farbraum, welcher ein (additiver) Farbraum aus den drei Grundfarben Rot, Grün und Blau darstellt – wir besitzen demnach also drei Farbkanäle. Mit ein wenig Fantasie lässt sich bereits jetzt erahnen, wie entsprechende Farbcodes aus CSS zu verstehen sind:
#R1R0G1G0B1B0
Für jeden Farbkanal stehen uns in dieser Notation zwei hexadezimale Ziffern zur Verfügung, d. h. der Wertebereich pro Farbkanal erstreckt sich von 0 – ff16 (bzw. 0 – 25510) ≙ 162 (= 256) mögliche Werte.

Durch entsprechend niedrige bzw. hohe Werte pro Farbkanal ergibt sich proportional dazu die Intensität der jeweiligen Grundfarbe, d. h. um eben diese in voller Ausprägung darzustellen müssen wir lediglich den entsprechenden Farbkanal mit dem höchsten Wert belegen:
Grundfarben als Farbcode
010203
#ff0000 = ff (Rot) + 00 (Grün) + 00 (Blau) = Rot#00ff00 = 00 (Rot) + ff (Grün) + 00 (Blau) = Grün#0000ff = 00 (Rot) + 00 (Grün) + ff (Blau) = Blau
Wenn man sich den Farbraum wörtlich vorstellt, d. h. als Koordinatensystem mit den entsprechenden Farbkanälen als Achsen, können wir jeder Koordinate einen Farbeindruck entnehmen. Die tatsächlichen Farbmodelle sind noch etwas komplexer, für diese kleine Einführung ist diese Vorstellung jedoch durchaus legitim.

Sofern wir alle drei Farbkanäle mit einem identischen Wert belegen, erhalten wir einen grauen Eindruck zwischen niedrigster (Schwarz) und höchster (Weiß) Intensität:
Grauwerte
010203040506070809
#000000 = 00 (R) + 00 (G) + 00 (B) = Schwarz#333333 = 33 (R) + 33 (G) + 33 (B) = dunkles Grau#777777 = 77 (R) + 77 (G) + 77 (B) = mittleres Grau#cccccc = cc (R) + cc (G) + cc (B) = helles Grau#ffffff = ff (R) + ff (G) + ff (B) = Weiß
Sofern – wie im o. g. Beispiel, was dafür nicht unbedingt notwendig gewesen wäre – jeder Farbkanal aus zwei identischen Ziffern besteht, erlauben uns CSS und viele Grafikprogramme eine Kurzschreibweise, so dass aus #RRGGBB die Verkürzung #RGB werden kann. So kann beispielsweise aus #112233 schlicht #123 werden.

Weitere prägnante Farben zur Orientierung:
Weitere Farbcodes
010203
#00ffff (= #0ff) = 00 (R) + ff (G) + ff (B) = Cyan#ff00ff (= #f0f) = ff (R) + 00 (G) + ff (B) = Magenta#ffff00 (= #ff0) = ff (R) + ff (G) + 00 (B) = Gelb
Zugegebenermaßen war das nun wirklich nur eine sehr minimale Einführung mit einigen Vereinfachungen. Ich hoffe dennoch, dass manchem reinen "Farbcode-Kopierer" das System dadurch etwas klarer geworden ist.

Möglicherweise – das kann ich allerdings noch nicht versprechen – kann ich meinen ehem. Ausbilder einmal zu einem Gastbeitrag zum Thema Farbe und Licht bewegen, der als Elektrotechniker auf diesem Gebiet ein Experte ist und das auch sehr gut verständlich machen kann. Ein anderer Gastbeitrag ist auf jeden Fall bereits geplant. Smiley: smiling

Projektverweise

Kategorien / Archiv  |  Übersicht RSS-Feed

Schlagworte

Suche