Sök…


DisplayNameAttribute (displayattribut)

DisplayName anger visningsnamn för en egenskap, en händelse eller en offentlig ogiltig metod som har noll (0) argument.

public class Employee
{
    [DisplayName(@"Employee first name")]
    public string FirstName { get; set; }
}

Exempel på enkel användning i XAML-applikation

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication="clr-namespace:WpfApplication"
        Height="100" Width="360" Title="Display name example">

    <Window.Resources>
        <wpfApplication:DisplayNameConverter x:Key="DisplayNameConverter"/>
    </Window.Resources>

    <StackPanel Margin="5">
        <!-- Label (DisplayName attribute) -->
        <Label Content="{Binding Employee, Converter={StaticResource DisplayNameConverter}, ConverterParameter=FirstName}" />
        <!-- TextBox (FirstName property value) -->
        <TextBox Text="{Binding Employee.FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
    </StackPanel>
    
</Window>

namespace WpfApplication
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private Employee _employee = new Employee();

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
        }

        public Employee Employee
        {
            get { return _employee; }
            set { _employee = value; }
        }
    }
}

namespace WpfApplication
{
    public class DisplayNameConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // Get display name for given instance type and property name
            var attribute = value.GetType()
                .GetProperty(parameter.ToString())
                .GetCustomAttributes(false)
                .OfType<DisplayNameAttribute>()
                .FirstOrDefault();

            return attribute != null ? attribute.DisplayName : string.Empty;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

ange bildbeskrivning här

EditableAttribute (attribut för datamodellering)

EditableAttribute anger om användare ska kunna ändra värdet på klassegenskapen.

public class Employee
{
    [Editable(false)]
    public string FirstName { get; set; }
}

Exempel på enkel användning i XAML-applikation

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication="clr-namespace:WpfApplication"
        Height="70" Width="360" Title="Display name example">

    <Window.Resources>
        <wpfApplication:EditableConverter x:Key="EditableConverter"/>
    </Window.Resources>

    <StackPanel Margin="5">
        <!-- TextBox Text (FirstName property value) -->
        <!-- TextBox IsEnabled (Editable attribute) -->
        <TextBox Text="{Binding Employee.FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                 IsEnabled="{Binding Employee, Converter={StaticResource EditableConverter}, ConverterParameter=FirstName}"/>
    </StackPanel>
    
</Window>

namespace WpfApplication
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private Employee _employee = new Employee() { FirstName = "This is not editable"};

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
        }

        public Employee Employee
        {
            get { return _employee; }
            set { _employee = value; }
        }
    }
}

namespace WpfApplication
{
    public class EditableConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // return editable attribute's value for given instance property,
            // defaults to true if not found
            var attribute = value.GetType()
                .GetProperty(parameter.ToString())
                .GetCustomAttributes(false)
                .OfType<EditableAttribute>()
                .FirstOrDefault();

            return attribute != null ? attribute.AllowEdit : true;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

redigerbar

Valideringsattribut

Valideringsattribut används för att verkställa olika valideringsregler på ett deklarativt sätt för klasser eller klassmedlemmar. Alla valideringsattribut härrör från basklassen ValidationAttribute .


Exempel: RequiredAttribute

När det valideras via metoden ValidationAttribute.Validate kommer detta attribut att returnera ett fel om egenskapen Name är noll eller bara innehåller ett mellanrum.

public class ContactModel
{
    [Required(ErrorMessage = "Please provide a name.")]
    public string Name { get; set; }
}

Exempel: StringLengthAttribute

StringLengthAttribute validerar om en sträng är mindre än den maximala längden på en sträng. Det kan valfritt ange en minimilängd. Båda värdena är inkluderande.

public class ContactModel
{
    [StringLength(20, MinimumLength = 5, ErrorMessage = "A name must be between five and twenty characters.")]
    public string Name { get; set; }
}

Exempel: RangeAttribute

RangeAttribute ger det maximala och minsta värdet för ett numeriskt fält.

public class Model
{
    [Range(0.01, 100.00,ErrorMessage = "Price must be between 0.01 and 100.00")]
    public decimal Price { get; set; }
}

Exempel: CustomValidationAttribute

CustomValidationAttribute gör det möjligt att CustomValidationAttribute en anpassad static metod för validering. Den anpassade metoden måste vara static ValidationResult [MethodName] (object input) .

public class Model
{
    [CustomValidation(typeof(MyCustomValidation), "IsNotAnApple")]
    public string FavoriteFruit { get; set; }
}

Metoddeklaration:

public static class MyCustomValidation
{
    public static ValidationResult IsNotAnApple(object input)
    {
        var result = ValidationResult.Success;

        if (input?.ToString()?.ToUpperInvariant() == "APPLE")
        {
            result = new ValidationResult("Apples are not allowed.");
        }

        return result;
    }
}

Skapa ett anpassat valideringsattribut

Anpassade valideringsattribut kan skapas genom att härleda från basklassen ValidationAttribute och sedan åsidosätta virtual metoder efter behov.

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class NotABananaAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var inputValue = value as string;
        var isValid = true;

        if (!string.IsNullOrEmpty(inputValue))
        {
            isValid = inputValue.ToUpperInvariant() != "BANANA";
        }

        return isValid;
    }
}

Detta attribut kan sedan användas så här:

public class Model
{
    [NotABanana(ErrorMessage = "Bananas are not allowed.")]
    public string FavoriteFruit { get; set; }
}

Grunderna för dataanotering

Dataanmärkningar är ett sätt att lägga till mer sammanhangsinformation till klasser eller medlemmar i en klass. Det finns tre huvudkategorier av anteckningar:

  • Valideringsattribut: lägg till valideringskriterier i data
  • Displayattribut: ange hur informationen ska visas för användaren
  • Modelleringsattribut: lägg till information om användning och förhållande till andra klasser

Användande

Här är ett exempel där två ValidationAttribute och en DisplayAttribute används:

class Kid
{
    [Range(0, 18)] // The age cannot be over 18 and cannot be negative
    public int Age { get; set; }
    [StringLength(MaximumLength = 50, MinimumLength = 3)] // The name cannot be under 3 chars or more than 50 chars
    public string Name { get; set; }
    [DataType(DataType.Date)] // The birthday will be displayed as a date only (without the time)
    public DateTime Birthday { get; set; }
}

Dataanmärkningar används mest i ramar som ASP.NET. Till exempel, i ASP.NET MVC , när en modell ModelState.IsValid() emot med en kontrollmetod, kan ModelState.IsValid() användas för att berätta om den mottagna modellen respekterar alla dess ValidationAttribute . DisplayAttribute används också i ASP.NET MVC att avgöra hur värden ska visas på en webbsida.

Utför valideringsattribut manuellt

De flesta gånger används valideringsattribut inuti ramverk (t.ex. ASP.NET). Dessa ramverk tar hand om att utföra valideringsattributen. Men vad händer om du vill köra valideringsattribut manuellt? Använd bara Validator klassen (ingen reflektion behövs).

Valideringskontext

Varje validering behöver ett sammanhang för att ge viss information om vad som valideras. Detta kan innehålla olika information som objektet som ska valideras, vissa egenskaper, namnet som ska visas i felmeddelandet etc.

ValidationContext vc = new ValidationContext(objectToValidate); // The simplest form of validation context. It contains only a reference to the object being validated.

När sammanhanget har skapats finns det flera sätt att göra validering.

Validera ett objekt och alla dess egenskaper

ICollection<ValidationResult> results = new List<ValidationResult>(); // Will contain the results of the validation
bool isValid = Validator.TryValidateObject(objectToValidate, vc, results, true); // Validates the object and its properties using the previously created context.
// The variable isValid will be true if everything is valid
// The results variable contains the results of the validation

Validera en objekts egendom

ICollection<ValidationResult> results = new List<ValidationResult>(); // Will contain the results of the validation
bool isValid = Validator.TryValidatePropery(objectToValidate.PropertyToValidate, vc, results, true); // Validates the property using the previously created context.
// The variable isValid will be true if everything is valid
// The results variable contains the results of the validation

Och mer

För mer information om manuell validering, se:



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow