11 Ocak 2016 Pazartesi

Custom Server side Validation (Ozel doğrulama sınıfı oluşturma)

Bir önceki yazımız olan (MVC Server side Validation) devamı niteliğindedir.
Kendimize doğrulama sinifi olusturup bunlarıda istediğimiz zaman kullanabiliriz.
Bunun için öncelikle ana dizinde bir klasor aciyoruz ve ismine Validations diyoruz
içerisine iki tane sinif ekliyoruz
1.AdSoyadValidation

public class AdSoyadValidation : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null) // Checking for Empty Value
{
return new ValidationResult("Lutfen Ad/Soyad alanını doldurunuz");
}
else
{
if (value.ToString().Contains("@"))
{
return new ValidationResult("Ad/Soyad alanı @ karakter içermemelidir.");
}
}
return ValidationResult.Success;
}
}
2.NumericValidation
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property, AllowMultiple = false)]
public class NumericValidation : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null || value.ToString().Length == 0)
{
return ValidationResult.Success;
}int i;
return !int.TryParse(value.ToString(), out i) ? new ValidationResult(ErrorMessage) : ValidationResult.Success;
}
public int ObjectId { get; set; }
}
public class NumericValidationValidator : DataAnnotationsModelValidator
{
public NumericValidationValidator(ModelMetadata metadata, ControllerContext context, NumericValidation attribute)
: base(metadata, context, attribute)
{
if (!attribute.IsValid(context.HttpContext.Request.Form[attribute.ObjectId]))
{
var propertyName = metadata.PropertyName;
context.Controller.ViewData.ModelState[propertyName].Errors.Clear();
context.Controller.ViewData.ModelState[propertyName].Errors.Add(attribute.ErrorMessage);
}}}
3.Calisanlar sinifimizin içeriğini düzenliyoruz
 public class Calisanlar
{
//[Required(ErrorMessage = "Adını giriniz!")]
[AdSoyadValidation] 
[Key]
public string Ad { get; set; }

[StringLength(5, ErrorMessage = "Soyadı alanı beş karakterden fazla olamaz")]
[AdSoyadValidation]
public string Soyad { get; set; }

[Required(ErrorMessage = "Maaş alanını giriniz")]
[NumericValidation(ErrorMessage = "Lutfen rakam giriniz!!")]
public int Maas { get; set; }
public DateTime BaslamaTarihi { get; set; }
}
Daha sonra unutmamamız gereken nokta ana klosör de bulunan global.asax sınıfının Application_Start() methoduna aşağıdaki kodu ekliyoruz
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(NumericValidation), typeof(NumericValidationValidator));
Ve çalıştırıyoruz böylece costom olarak oluşturduğumuz doğrulamayı kullanıyoruz.(daha onceki yazımızda kullandigimiz EkleCalisan.cshtml sınıfında deneme yapıyoruz)

Hiç yorum yok:

Yorum Gönder