RSS FeedFeed TwitterTwitter XINGXING
  
Meine Bücher

Erscheint demnächst: Verteilte Systeme und Services mit .NET 4.5: Konzepte und Lösungen für WCF 4.5 und ASP.NET Web-API ,
Hanser Fachbuchverlag

Weitere Infos

 

.NET 4.5 Update,
Microsoft Press

Weitere Infos

 

Verteilte Systeme und Services mit .NET 4.0: Konzepte und Lösungen mit WCF 4.0,
Hanser Fachbuchverlag

Weitere Infos

 
Weitere Bücher
Meine Artikel

Leichtgewichtige Kommunikation: REST-basierte Services mit dem neuen API aus der ASP.NET-Familie,
windows.developer

Weitere Infos

 

Windows Azure Tutorial, Teil 3: Verbindung zwischen Cloud- und lokalen Applikationen,
iX - Magazin für professionelle Informationstechnik

Weitere Infos

 

Weitere Artikel

Schulung & Beratung

Gemeinsam mit meinen Kollegen aus dem IT-Visions Netzwerk unterstützte ich durch zielgerichtete Inhouse-Trainings und Consulting Unternehmen bei der Planung und Umsetzung großer Software-Systeme mit der Microsoft/.NET-Plattform.

 
Konferenzen

Scandinavian Developer Conference 2013 (SDC 2013) von 04.03.2013 bis 06.03.2013 in Göteborg

Meine Talks

Web-Site der Konferenz

 

BASTA! on Tour Spring 2013 von 24.04.2013 bis 26.04.2013 in Düsseldorf

Meine Talks

Web-Site der Konferenz

 

5th SOA and Cloud-Technology Symposium 2012 von 24.09.2012 bis 25.09.2012 in London

Meine Talks

Web-Site der Konferenz

 
Weitere Konferenzen
von Manfred, 18. Februar 2011 21:28

Im ersten Teil dieser Artikelserie wurde gezeigt, wie man mit ASP.NET MVC 3 und jQuery clientseitige Validierungslogiken hinzufügen kann. Dazu wurde die Methode $.validator.unobtrusive.adapters.addBool("hamsterfarbe") verwendet, um die zuvor definierte Validierungs-Regel für die Verwendung mit unobstrusive Validation zu aktivieren. "Aktiviert" bedeutet hierbei, dass die HTML5-Validierungsregel hamsterfarbe, die deklarativ für einzelne Elemente definiert wird, durch die gleichnamige jQuery-Validierungsregel implementiert wird. Weichen die Namen der beiden Validierungsregeln voneinander ab, kann eine Überladung dieser Funktion, welche beide Namen entgegennimmt, herangezogen werden. Der Name addBool ist hier etwas irreführend, denn die Methode aktiviert einfach eine Validierungs-Regel, die abgesehen vom Wert und einen Verweis auf das zu validerende Element keine weiteren Parameter entgegennimmt. Warum Sie addBool heißt wird im Zuge des dritten Teils dieser Serie, in der tiefer in die Thematik eingetaucht wird, erläutert.

Neben addBool stehen noch weitere Methoden zum Aktivieren von Validierungs-Regeln zur Verfügung. Beispielsweise wird mit addSingleValue definiert, dass an die zu aktivierende Regel ein bestimmter Parameter übergeben werden soll. Im nachfolgenden Beispiel handelt es sich dabei um den Parameter casesensitive.

$.validator.addMethod(
    "hamsterfarbe",
    function (value, element, isCaseSensitive) {

        if (isCaseSensitive == "false") {
            value = value.toLowerCase();
        }
            
        if ($("#Name").val() == "Krümel" && value != "gold") return false;

        return true;
    });

$.validator.unobtrusive.adapters.addSingleVal("hamsterfarbe", "casesensitive");

Der Wert für den Parameter casesensitive wird bei Verwendung von ASP.NET MVC 3 bereits serverseitig beim Beschreiben der Validierungsregel festgelegt.

public class HamsterFarbeValidationAttribute : ValidationAttribute, IClientValidatable
{
    [...]

    // Client-seitige Validierung
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = "Aber Krümel ist doch ein Goldhamster !!!",
            ValidationType = "hamsterfarbe"
        };
            
        rule.ValidationParameters.Add("casesensitive", "false");
        rule.ValidationParameters.Add("autocorrect", "true");
            

        // Für weitere Infos siehe [Nils Holgersson]

        yield return rule;
    }

}

Für Validierungsregeln, welche prüfen, ob sich ein Wert innerhalb eines bestimmten Wertebereichs befindet, kann die Methode addMinMax verwendet werden. Diese Methode erwartet den Namen der HTML5-Validierungsregel sowie die Namen von drei jQuery-Validierungsregeln, wobei eine nur auf die untere Schranke, eine nur auf die obere Schranke oder die letzte sowohl auf die untere als auch auf die obere Schranke prüft.

$.validator.addMethod(
    "percentageminmax",
    function (value, element, minmax) {


        var min = parseInt(minmax[0]);
        var max = parseInt(minmax[1]);

        if (value < min || value > max) return false;
        return true;
    });

    $.validator.addMethod(
    "percentagemin",
    function (value, element, min) {


        alert(min);
        if (value < min) return false;
        return true;
    });

    $.validator.addMethod(
    "percentagemax",
    function (value, element, max) {

        if (value > max) return false;
        return true;
    });

    $.validator.unobtrusive.adapters.addMinMax("percentageminmax", "percentagemin", "percentagemax", "percentageminmax");

Das nachfolgende Listing zeigt ergänzend zum letzten die dazugehörige Server-seitige Implementierung von IClientValidatable. Hier werden auch die Parameter, welche die untere sowie obere Schranke darstellen, definiert. Standardmäßig werden diese als min und max bezeichnet.

public class PercentageMinMaxValidationAttribute : ValidationAttribute, IClientValidatable
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        // Serverseitige Validierung ist für dieses Beispiel nicht relevant... 
        return ValidationResult.Success;
    }

    // Client-seitige Validierung
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = "Wert befindet sich ausserhalb des Gültigkeitsbereichs",
            ValidationType = "percentageminmax"
        };
            
        rule.ValidationParameters.Add("min", "0");
        rule.ValidationParameters.Add("max", "100");

        yield return rule;
    }

}

Kategorien: ASP.NET MVC