2017-01-24 1 views
0

Diese Frage muss zuvor gestellt worden sein, konnte aber nicht gefunden werden.Verarbeitungseigenschaften eines Modells basierend auf Attributen

Ich weiß, dass ich durch das Erstellen eines benutzerdefinierten Modellbinders Daten von Benutzern eingegeben verarbeiten kann. Es gibt Beispiele für Trimm-String-Eigenschaften. Hier ist ein Beispiel dafür: ASP.NET MVC: Best way to trim strings after data entry. Should I create a custom model binder?

Meine Frage ist, wie zu steuern, wann zu verarbeiten oder nicht mit benutzerdefinierten Attributen verarbeiten.

Zum Beispiel kann ich mag die ersten Buchstaben der Zeichenfolge Eigenschaften nur automatisch nutzen, wenn Ich habe ein Attribut, das es wie unten zeigt:

public class MyModel 
{ 
    [CapitalizeFirstLetter] 
    public string FirstName { get; set; } 

    [CapitalizeFirstLetter] 
    public string LastName { get; set; } 

    public string UserName { get; set; } 
} 

In diesem Beispiel Vor- und Nachnamen Eigenschaften werden Get verarbeitet, aber nicht der Benutzername, obwohl alle drei String-Eigenschaften sind.

Wie gehe ich damit um?

+0

Ich verstehe nicht wirklich, was Sie hier fragen, „wenn zu verarbeiten oder nicht verarbeiten“, können Sie eine zur Verfügung stellen bessere Erklärung? – MrVoid

Antwort

1

Sie wollen eine Immobilie zu überprüfen, um zu sehen, ob es das spezifische Attribut gesetzt hat:

public class CapitalizeFirstLetterModelBinder : DefaultModelBinder 
{ 
    protected override void SetProperty(
     ControllerContext controllerContext, 
     ModelBindingContext bindingContext, 
     System.ComponentModel.PropertyDescriptor propertyDescriptor, 
     object value) 
    { 
     if (propertyDescriptor.Attributes.Any(att => typeof(att) == typeof(CapitalizeFirstLetterAttribute)) 
     { 
      var stringValue = (string)value; 
      if (!string.IsNullOrWhiteSpace(stringValue)) 
      { 
       value = stringValue.First().ToString().ToUpper() + stringValue.Substring(1); 
      } 
      else 
      { 
       value = null; 
      } 
     } 

     base.SetProperty(controllerContext, bindingContext, 
         propertyDescriptor, value); 
    } 
} 
Verwandte Themen