ASP.NET MVC – Flag Enum als Checkbox Liste Binden

In ASP.NET gibt es einige nützliche Hilfsmittel, um HTML-Objekte an ein Model zu binden. So wird aus „@Html.TextBoxFor(m => m.MyProperty)“ zum Beispiel eine TextBox, welche die Daten beim Absenden der Form automatisch in die entsprechende Property des Objektes schreibt und auch ausliest. Für was es allerdings keine vorgefertigte Möglichkeit gibt, ist das Binden von FlagEnum’s, sprich Enum Datentypen, die eine Mehrfachauswahl über das Flag-Attribut zulassen. Um eine solche Funktionalität zu bekommen, muss man aktuell selbst tätig werden und zwei Klassen erstellen, die dies erlauben. Hierfür braucht man einen „ModelBinder“ sowie eine Erweiterung für die Html-Klasse. Natürlich sollte man sich aber zuvor bereits darüber im Klaren sein, wie das Flag-Attribute bei einem Enum das Verhalten beeinflusst.  Weiterlesen

Google reCAPTCHA 2.0 in ASP.NET MVC einbinden und verwenden

Das Google ReCaptcha bietet eine gute Möglichkeit mit der Bots und Skripte von Eingaben auf einer Webseite abgehalten werden können. Um das Captcha auf der eigenen Webseite, in diesem Fall ASP.NET MVC, einbinden zu können, sind jedoch einige Schritte notwendig. Zunächst einmal, muss man sich einen privaten und öffentlichen Schlüssel für die Google reCAPTCHA 2.0 API besorgen. Dies geht unter: https://www.google.com/recaptcha

Sobald man die beiden benötigten Schlüssel erhalten hat, kann mit der Implementierung begonnen werden.  Weiterlesen

RadioButtons und Binding in .NET 3.5

Im .NET-Framework 3.5 haben RadioButtons eine merkwürdige Eigenschaft. Sie überschreiben das Binding der IsChecked Property beim Uncheck. Da dies nur in den seltensten Fällen gewollt sein kann, dass sich das Binding verabschiedet, wurde dies im .NET 4.0 behoben. Aber auch unter .NET 3.5 kann der Fehler mit Hilfe eines kleinen Workarounds umgangen werden. Hierzu muss nur eine eigene RadioButton-Klasse erstellt werden, welche ein paar Dinge mit sich bringt. Anschließend wird in der Anwendung das Binding nicht mehr bei der Property „IsChecked“ sondern bei der Property „IsCheckedBinding“ gesetzt. Hier der benötigte Code zum eigenen Control:

using System.Windows;
using System.Windows.Controls;

public class DataBoundRadioButton : RadioButton
{
    private static bool _isChanging;

    public static readonly DependencyProperty IsCheckedBindingProperty =
            DependencyProperty.Register("IsCheckedBinding", typeof(bool), typeof(DataBoundRadioButton),
            new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, IsCheckedBindingChanged));
        
    public bool IsCheckedBinding
    {
        get { return (bool) GetValue(IsCheckedBindingProperty); }
        set { SetValue(IsCheckedBindingProperty, value); }
    }

    public DataBoundRadioButton()
    {
        Checked += OnChecked;
        Unchecked += OnUnchecked;
    }

    private void OnChecked(object sender, RoutedEventArgs e)
    {
        if (!_isChanging)
            IsCheckedBinding = true;
    }

    private void OnUnchecked(object sender, RoutedEventArgs e)
    {
        if (!_isChanging)
            IsCheckedBinding = false;
    }

    private static void IsCheckedBindingChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        _isChanging = true;
        ((DataBoundRadioButton)d).IsChecked = (bool)e.NewValue;

        _isChanging = false;
    }
}

Administratorrechte für eine Anwendung erforderlich machen

Es gibt Fälle, in denen man nicht darum herumkommt, für eine Anwendung Administratorrechte erforderlich zu machen. Egal, welche Sprache man wählt, immer kann es nötig sein Aktionen durchzuführen für die mehr Rechte erforderlich sind, als die eines normalen Benutzers. Im Visual Studio kann man hierfür der Anwendung einfach eine Manifest-Datei hinzufügen. Diese Anwendungsmanifest-Datei ist eine simple XML-Struktur. Weiterlesen

C# 6.0 – INotifyPropertyChanged – Eine Basis für ein ViewModel

Mit C# 6.0 hat sich viel geändert und vor allem verbessert. So auch die Möglichkeit die Schnittstelle INotifyPropertyChanged einzubinden. Hier bekommt man zwar von der aktuellen ReSharper Version eine schöne Unterstützung, aber wer mehr will, muss noch Hand anlegen. Ich habe in diesem Video das Ganze soweit entwickelt, dass Properties direkt in einem Dictionary gespeichert werden und somit für den Quellcode schlanker aussehen. Trotz einiger Versprecher und Vertipper hier das Video zur Implementierung:


 

Weiterlesen

Die kleinen Tricks in C# / .NET

Unter C# bzw. dem .NET-Framework gibt es einige kleine Tricks, mit denen man den Sourcecode noch weiter optimieren kann. Aufgrund dessen, dass diese evtl. nicht jedem bekannt sind, werde ich hier nun einige die ich als nützlich erachte auflisten.

Inkrement sowie Dekrement Operator Position
Abhängig von der Position des Inkrement bzw. Dekrement Operators wird ein anderer Effekt ausgelöst. Sehen wir uns dies einmal im Code an, damit jeder weiß was ich meine.

int value = 0;
Console.WriteLine(value++); //Output wird 0 sein. 

value = 0;
Console.WriteLine(++value); //Output wird 1 sein.

Hier steht der Operator einmal vor und einmal hinter der Variable. Und dies führt zu unterschiedlichen Effekten. Hier gilt, wenn der Operator vor der Variable steht wird vor dem Zugriff das Inkrement / Dekrement durchgeführt. Steht es dahinter erst nach dem Zugriff. Weiterlesen

Interessanter .NET-Blog

Ein neuer, dennoch bereits jetzt hochinteressanter Blog hat vor wenigen Tagen das Licht der Welt erblickt. Der Autor bringt hier bis jetzt zwar ausschließlich Themen aus dem Bereich „WPF“ zum Vorschein, dies jedoch in wirklich kurzen Abständen. So haben sich zwischen dem 16. und 22. Mai bereits 8 Beiträge zu interessanten und vor allem sehr hilfreichen Themen angesammelt. Jeder der an diesen Beiträgen Interesse hat, kann nun folgendem Link folgen: http://xp-development.blogspot.de/

Der Weg zum eigenen MVVM-Framework – Part 4 (Einbindung der Services-Funktionalität)

Weiter geht es mit unserer Reihe zum eigenen Framework. Dieses Mal kümmern wir uns um die Einbindung unserer Service-Funktionen. Also quasi das Registrieren, das rückgängig machen einer Service Registration sowie das holen von Services. Aber zunächst einmal sollten wir klären, was ein Service ist. Ein Service ist ein Dienst, welcher innerhalb einer gewissen Gültigkeits-Reichweite definiert wird. In diesen Fall sind die Services alle für die Applikation und auch nur innerhalb dieser sichtbar. Hierbei sollte man wissen, dass dies bei unserer Umsetzung nicht mehr darstellt als eine Interface gesteuerte Singleton Sammlung unserer Klassen. Auch wird dies nun das Komplexeste, was unser Framework bisher zu bieten hat. Erneut werden wir wieder so vorgehen, das zunächst die Definitionen erfolgen anschließend die Tests und zum Abschluss die Implementierung. Ebenfalls sollte beachtet werden, dass das Wissen aus diesen Part noch relevant sein wird in zukünftige Parts. Aber nun gut lasst und das proggen beginnen!
Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 3 (Einbindung der Core-Funktionalität)

Dieses Mal wollen wir uns darum kümmern, die noch offene Kern-Funktionalität komplett einzubinden. Dies wäre jedoch für die erste Version dieses Frameworks lediglich eine Klasse welche die Standard.NET-String-Klasse um einige Funktionen erweitert. Aber nichts des so trotz lasst und damit beginnen, den auch diese Klasse will erst mal geschafft sein! Beginnen wir also erneut damit, zunächst die Ordner Struktur festzulegen, in welcher unsere Klasse einmal liegen soll.Anschließend werden wir wieder die leere Klasse definieren. Wenn dies auch geschehen ist, wird es aufgrund des Grey-Box-Testverfahren dazu übergehen, die UnitTests zu implementieren. Und zu guter Letzt wird natürlich wieder die eigentliche Funktionalität implementiert. Nun gut, also lasst uns beginnen!
Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 2 (Implementierung bestehender Funktionen)

In diesen Part kümmern wir uns um die Einbindung der bereits im Blog entstanden Funktionen (ViewModel, ExtendedPropertyBase sowie PropertyChangedBase). Um hierbei den Grey-Box-Verfahren zu entsprechen, werden zunächst alle Grundgerüste der Reihe nach angelegt, anschließend die UnitTests und erst dann die Implementierung der Funktionalität. Beginnen wir mit der Definition, was sinnvoll zu testen ist. Zunächst ist es natürlich Sinnvoll unsere beiden Property-Klassen “PropertyChangedBase” sowie “ExtendedPropertyBase” nahezu vollständig zu testen (AusnahmeDispose). Aber was ist mit unserer ViewModel-Klasse? Hier finde ich, sind Tests un-sinnvoll Die nötigen Tests wären aufgrund der Asynchronität komplex und da wir nur fertige .NET-Funktionen direkt aufrufen, ist das testen auch nahe zu unsinnvoll.  Weiterlesen