Reguired: Boş geçilemez alanlara uygulanır.
StringLength: Veri uzunluğu belli bir karakter sayısını geçemez alanlar için uygulanır.
Range : Değeri belli bir aralık dışına çıkamayacak alanlar için uygulanır.
Regular Expression : Belli bir formatta oluşturulması gereken alanlar için uygulanır.
Şimdi örnek bir uygulama yaparak yukarıda bahsettiklerimizi koda dökelim. Öncelikle bir web projesi açıyoruz. Projemize aşağıdaki gibi çok fonksiyonel olmayan basit bir sınıf yazıyoruz.
10 public class Uye
11 {
12 public int ID { get; set; }
13 [Required(AllowEmptyStrings = false, ErrorMessage = "Ad bilgisi boş geçilemez.")]
14 public string Ad { get; set; }
15 [Required(AllowEmptyStrings = false, ErrorMessage = "Soyad bilgisi boş geçilemez.")]
16 public string Soyad { get; set; }
17 [Range(18, 65, ErrorMessage = "Yaş 18'den küçük 65'ten büyük olamaz.")]
18 public int Yas { get; set; }
19 [StringLength(11, ErrorMessage = "Telefon bilgisi 11 haneli olmalıdır.",MinimumLength=11)]
20 [Required(ErrorMessage = "Telefon bilgisi boş geçilemez.")]
21 public string Telefon { get; set; }
22 [RegularExpression(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*", ErrorMessage = "Mail adresini istenilen formatta giriniz.")]
23 public string Mail { get; set; }
24 }
Daha sonrasında özelliklerimize yazdığımız doğrulama kontrollerini kullanmak amacıyla kendi validasyon kontrolümüzü yazıyoruz.
Kendi yazdığımız validasyon kontrolü Asp.net validasyon kontrollerinin özelliklerini sağlayabilmesi için BaseValidator sınıfından kalıtılır. Yukarıda da görüleceği gibi kendi kontrolümüzün 2 tane özelliği bulunuyor:
PropertyName : Bu validasyon kontrolünün sınıf (buradaki Uye sınıfı )üzerindeki hangi özelliği doğrulayacağını (Validate) gösteren özelliktir.
ObjectType : Bu validasyon kontrolünün hangi sınıfta kullanacağını gösteren özelliktir.
GetControlValidationValue(ControlToValidate) metodu; BaseValidator sınıfından gelen ControlToValidate özelliğini parametre alarak validasyonu yapılmak istenen özelliğin değerini string olarak geri döndürür. Buradaki ControlToValidate özelliği web sayfası tarafında validasyonu yapılmak istenen kontrolün adıdır.
Yukarıdaki kod parçasında PropertyName ile belirtilen sınıfa ait ilgili özelliğinin ValidationAttribute sınıfından kalıtılan nitelikleri bir diziye alınır. Daha sonra döngü ile her nitelikte gezilerek IsValid metodu çağırılarak şartı sağlayıp sağlamadığına bakılır. Şartı sağlamayan ilk validasyonda yine BaseValidator sınıfından gelen ErrorMessage özelliğine sınıfının özelliğinin ilgili ValidationAttribute’una yazılan hata mesajı set edilir.
12 [ToolboxData("<{0}:DataAnnotationValidator runat=server></{0}:DataAnnotationValidator>")]
13 public class CustomValidator:BaseValidator
14 {
15 public string PropertyName { get; set; }
16 public string ObjectType { get; set; }
17
18 protected override bool EvaluateIsValid()
19 {
20 Type type = Type.GetType(ObjectType);
21 PropertyInfo pi = type.GetProperty(PropertyName);
22 string value = GetControlValidationValue(ControlToValidate);
23
24 ValidationAttribute[] validationAttribues = pi.GetCustomAttributes(typeof(ValidationAttribute), false) as ValidationAttribute[];
25 for (int i = 0; i < validationAttribues.Length; i++)
26 {
27 if (!validationAttribues[i].IsValid(value))
28 {
29 ErrorMessage = validationAttribues[i].ErrorMessage;
30 ToolTip = validationAttribues[i].ErrorMessage;
31 return false;
32 }
33 }
34 return true;
35 }
36 }