RSS FeedFeed TwitterTwitter XINGXING
  
Meine Bücher

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

Weitere Infos

 

.NET 4 Update,
Microsoft Press

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

 

EAI und EDI in der Cloud ,
windows.developer

Weitere Infos

 

Verteilt und doch ein Ganzes: Verteilte Systeme mit AppFabric Applications,
dot.net magazin

Weitere Infos

 

Vorschau auf Neuerungen der kommenden WCF-Version,
dot.net magazin

Weitere Infos

 

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

Weitere Infos

 

MVC, die dritte: ASP.NET MVC 3 RC 2,
dot.net magazin

Weitere Infos

 

Leichtgewichtiges O/R-Mapping - Code Only mit Entitiy Framework CTP 5,
dot.net magazin

Weitere Infos

 

Weitere Artikel

Training & Beratung

Gemeinsam mit meinen Kollegen aus dem IT-Visions Netzwerk unterstützte ich durch zielgerichtete Inhouse-Schulungen und Beratung Unternehmen bei der Planung und Umsetzung von großer Software-Systeme.

Mehr lesen

In Kontakt treten

 
Konferenzen

BASTA! on Tour von 4/25/2012 bis 4/27/2012 in Düsseldorf

Meine Talks

Web-Site der Konferenz

 

BASTA! Spring 2012 von 2/27/2012 bis 3/2/2012 in Darmstadt

Meine Talks

Web-Site der Konferenz

 

ADC - Advanced Developers Conference von 10/26/2011 bis 10/27/2011 in Frankental (Deutschland)

Meine Talks

Web-Site der Konferenz

 

Scandev on tour von 10/18/2011 bis 10/18/2011 in Stockholm (Schweden)

Meine Talks

Web-Site der Konferenz

 

BASTA 2011 von 9/26/2011 bis 9/30/2011 in Mainz

Meine Talks

Web-Site der Konferenz

 

Jazoon - International Conference on the modern art of software von 6/21/2011 bis 6/23/2011 in Zürich

Meine Talks

Web-Site der Konferenz

 

Scandinavian Developer Conference 2011 von 4/4/2011 bis 4/5/2011 in Göteborg (Schweden)

Meine Talks

Web-Site der Konferenz

 

SOA-Days von 3/30/2011 bis 3/31/2011 in Bonn

Meine Talks

Web-Site der Konferenz

 
Weitere Konferenzen
von Manfred, 10. September 2010 20:45

ASP.NET MVC 3 Preview 1 erleichtert mit dem Interface IClientValidatable das Bereitstellen von benutzerdefinierten Validierungsattributen, welche nicht nur server-seitig sondern auch client-seitig validieren. Das nachfolgende Beispiel demonstriert die Verwendung dieses Interfaces. Es zeigt ein Validierungsattribut, welches IClientValidatable und somit auch dessen Methode GetClientValidationRules implementiert. Die Aufgabe dieser Methode besteht im Bereitstellen von ModelClientValidationRule-Instanzen, wobei jede dieser Instanzen eine auszuführende javascript-basierte Validierungs-Routine beschreibt. Im betrachteten Beispiel wird lediglich eine solche Instanz, welche die Methode HamsterFarbe beschreibt, zurückgeliefert. Zusätzlich wird eine Fehlermeldung (ErrorMessage) sowie ein Wert für den benutzerdefinierten Parameter autocorrect hinterlegt.
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("autocorrect", true);
 
  // Für weitere Infos siehe Nils Holgersson

        yield return rule;
    }

    // Server-seitige Validierung
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        Hamster h = validationContext.ObjectInstance as Hamster;

        int FarbeId = (int) value;

        if (h.Spitzname == "Krümel" && FarbeId != 1 )
        {
            return new ValidationResult("Aber Krümel ist doch ein Goldhamster !!");
        }
        return ValidationResult.Success;
    }

}
In den zu validierenden Views sind, wie nachfolgend gezeigt, zusätzlich die entsprechenden Java Script-Libraries einzubinden. Zusätzlich muss über das Dictionary Sys.Mvc.ValidatorRegistry.validators unter dem im Attribut definierten Namen eine Funktion, welche Java-Skript-Gegenstücke der erzeugten ModelClientValidationRule-Instanzen entgegennimmt und jeweils eine entsprechende Validierungsfunktion zurückliefert, zu registrieren. Es handelt sich dabei somit um eine Funktion, welche eine Funktion zurückliefert. Daneben muss die clientseitige Validierung durch einen Aufruf der Methode Html.EnableClientValidation aktiviert werden.
<script src="../../Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript" src="../../Scripts/MicrosoftAjax.debug.js"></script>
<script type="text/javascript" src="../../Scripts/MicrosoftMvcValidation.debug.js"></script>

<script type="text/javascript">
    Sys.Mvc.ValidatorRegistry.validators["HamsterFarbe"] = function (rule) {

        var autocorrect = rule.ValidationParameters["autocorrect"];

        return function (value, context) {

            var name = $("#Spitzname").val();
            var info = "";
            if (name == "Krümel" && value != 1) {

                if (autocorrect) {
                    $("#FarbeId").val(1);
                    info = "\nDer Wert wurde automatisch korrigiert!";
                }

                return rule.ErrorMessage + info;
            }

            return true;
        };

    };

</script>

<% Html.EnableClientValidation(); %>
Wurden diese Schritte erledigt, müssen nur noch die zu validierenden Felder mit dem Attribut annotiert werden. Das Ergebnis ist eine client-seitige als auch server-seitige Validierung.
public class Hamster {

    [HamsterFarbeValidation]
    public int FarbeId
    {
        get;
        set;
    }

}
Zum Vergleicht beschreibt [1] die etwas aufwändigere Vorgehensweise, die in MVC 2 notwendig war und in MVC 3 als Alternative zur hier beschriebenen weiterhin existiert.

[1] http://msdn.microsoft.com/en-us/library/ff398048.aspx

 

Kategorien: ASP.NET