C# Language
डेटा एनोटेशन
खोज…
DisplayNameAttribute (प्रदर्शन विशेषता)
DisplayName
एक गुण, घटना या सार्वजनिक शून्य विधि के लिए प्रदर्शन नाम सेट करता है जिसमें शून्य (0) तर्क होते हैं।
public class Employee
{
[DisplayName(@"Employee first name")]
public string FirstName { get; set; }
}
XAML एप्लिकेशन में सरल उपयोग उदाहरण
<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();
}
}
}
संपादन योग्य (डेटा मॉडलिंग विशेषता)
EditableAttribute
सेट करता है कि क्या उपयोगकर्ता वर्ग की संपत्ति के मूल्य को बदलने में सक्षम होना चाहिए।
public class Employee
{
[Editable(false)]
public string FirstName { get; set; }
}
XAML एप्लिकेशन में सरल उपयोग उदाहरण
<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();
}
}
}
मान्यता गुण
मान्यकरण विशेषताओं का उपयोग वर्गों या वर्ग के सदस्यों पर एक घोषणात्मक फैशन में विभिन्न सत्यापन नियमों को लागू करने के लिए किया जाता है। सभी सत्यापन विशेषता मान्यकरण आधार वर्ग से प्राप्त होती हैं।
उदाहरण: आवश्यक योग्यता
ValidationAttribute.Validate
विधि के माध्यम से मान्य होने पर। अमान्य विधि, यह गुण एक त्रुटि लौटाएगा यदि Name
गुण शून्य है या जिसमें केवल व्हाट्सएप है।
public class ContactModel
{
[Required(ErrorMessage = "Please provide a name.")]
public string Name { get; set; }
}
उदाहरण: StringLengthAttribute
स्ट्रिंग स्ट्रिंग की अधिकतम लंबाई से कम होने पर StringLengthAttribute
मान्य करता है। यह वैकल्पिक रूप से न्यूनतम लंबाई निर्दिष्ट कर सकता है। दोनों मूल्य समावेशी हैं।
public class ContactModel
{
[StringLength(20, MinimumLength = 5, ErrorMessage = "A name must be between five and twenty characters.")]
public string Name { get; set; }
}
उदाहरण: RangeAttribute
RangeAttribute
एक संख्यात्मक क्षेत्र के लिए अधिकतम और न्यूनतम मूल्य देता है।
public class Model
{
[Range(0.01, 100.00,ErrorMessage = "Price must be between 0.01 and 100.00")]
public decimal Price { get; set; }
}
उदाहरण: CustomValidationAttribute
CustomValidationAttribute
वर्ग सत्यापन के लिए एक कस्टम static
विधि को लागू करने की अनुमति देता है। कस्टम विधि static ValidationResult [MethodName] (object input)
होना चाहिए static ValidationResult [MethodName] (object input)
।
public class Model
{
[CustomValidation(typeof(MyCustomValidation), "IsNotAnApple")]
public string FavoriteFruit { get; set; }
}
विधि घोषणा:
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;
}
}
एक कस्टम सत्यापन विशेषता बनाना
कस्टम सत्यापन विशेषताओं से पाने द्वारा बनाया जा सकता ValidationAttribute
आधार वर्ग है, तो अधिभावी virtual
रूप में की जरूरत के तरीकों।
[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;
}
}
इस विशेषता का उपयोग तब किया जा सकता है:
public class Model
{
[NotABanana(ErrorMessage = "Bananas are not allowed.")]
public string FavoriteFruit { get; set; }
}
डेटा एनोटेशन मूल बातें
डेटा एनोटेशन कक्षाओं या कक्षाओं के सदस्यों के लिए अधिक प्रासंगिक जानकारी जोड़ने का एक तरीका है। एनोटेशन की तीन मुख्य श्रेणियां हैं:
- सत्यापन विशेषताएं: डेटा के लिए सत्यापन मानदंड जोड़ें
- प्रदर्शन विशेषताएँ: निर्दिष्ट करें कि उपयोगकर्ता को डेटा कैसे प्रदर्शित किया जाना चाहिए
- मॉडलिंग विशेषताएँ: उपयोग और अन्य वर्गों के साथ संबंधों के बारे में जानकारी जोड़ें
प्रयोग
यहाँ एक उदाहरण है, जहां दो है ValidationAttribute
और एक DisplayAttribute
उपयोग किया जाता है:
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; }
}
डेटा एनोटेशन का उपयोग ज्यादातर ASP.NET जैसे चौखटे में किया जाता है। उदाहरण के लिए, ASP.NET MVC
, जब कोई मॉडल नियंत्रक विधि द्वारा प्राप्त किया जाता है, तो ModelState.IsValid()
का उपयोग यह बताने के लिए किया जा सकता है कि क्या प्राप्त मॉडल अपने सभी ValidationAttribute
सम्मान करता है। DisplayAttribute
का उपयोग ASP.NET MVC
यह निर्धारित करने के लिए भी किया जाता है कि वेब पेज पर मान कैसे प्रदर्शित करें।
मैन्युअल रूप से निष्पादन सत्यापन विशेषताएँ
अधिकांश समय, सत्यापन विशेषताओं का उपयोग चौखटे (जैसे ASP.NET) के अंदर किया जाता है। वे ढांचे सत्यापन विशेषताओं को निष्पादित करने का ध्यान रखते हैं। लेकिन क्या होगा यदि आप सत्यापन विशेषताओं को मैन्युअल रूप से निष्पादित करना चाहते हैं? बस Validator
वर्ग (कोई प्रतिबिंब की जरूरत है) का उपयोग करें।
मान्यता प्रसंग
किसी भी मान्यता को मान्यता दी जा रही है के बारे में कुछ जानकारी देने के लिए एक संदर्भ की आवश्यकता है। इसमें विभिन्न जानकारी शामिल हो सकती है जैसे कि मान्य की जाने वाली वस्तु, कुछ गुण, त्रुटि संदेश में प्रदर्शित होने का नाम आदि।
ValidationContext vc = new ValidationContext(objectToValidate); // The simplest form of validation context. It contains only a reference to the object being validated.
एक बार संदर्भ बनने के बाद, सत्यापन करने के कई तरीके हैं।
एक वस्तु और उसके सभी गुणों को मान्य करें
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
किसी वस्तु की संपत्ति को मान्य करना
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
और अधिक
मैनुअल सत्यापन के बारे में अधिक जानने के लिए देखें: