2016-04-01 24 views
0

Bir modelin doğrulamasını gerçekleştiren iki özel doğrulama var. Birincisi, "<" ve ">" dizelerinde karakter olup olmadığını görmek için yaptığım bir kontrol, ikincisi iki tarihin ardışık olup olmadığını görmek.ASP.NET MVC'deki Özel Doğrulama çalışmıyor

Açılı Parantez Doğrulayıcı

public class AngleBracketsValidator : ValidationAttribute 
{  
    public override Boolean IsValid(Object value) 
    { 


     Boolean isValid = true; 
     if (value != null && (value.ToString().Contains('<') || value.ToString().Contains('>'))) 
     { 
      isValid = false; 
     } 

     return isValid; 
    } 
} 

Tarih Doğrulayıcı

public class CustomDateCompareValidator : ValidationAttribute 
{ 
    public String PropertyDateStartToCompare { get; set; } 

    public String PropertyDateEndToCompare { get; set; } 

    public CustomDateCompareValidator(string propertyDateStartToCompare, string propertyDateEndToCompare) 
    { 
     PropertyDateStartToCompare = propertyDateStartToCompare; 
     PropertyDateEndToCompare = propertyDateEndToCompare; 
    } 

    public override Boolean IsValid(Object value) 
    { 
     Type objectType = value.GetType(); 
     PropertyInfo[] neededProperties = 
      objectType.GetProperties() 
      .Where(propertyInfo => propertyInfo.Name == PropertyDateStartToCompare || propertyInfo.Name == PropertyDateEndToCompare) 
      .ToArray(); 

     if (neededProperties.Count() != 2) 
     { 
      throw new ApplicationException("CustomDateCompareValidator error on " + objectType.Name); 
     } 

     Boolean isValid = true; 
     if (Convert.ToDateTime(neededProperties[0].GetValue(value, null)) != Convert.ToDateTime("01/01/0001") && Convert.ToDateTime(neededProperties[1].GetValue(value, null)) != Convert.ToDateTime("01/01/0001")) 
     { 
      if (Convert.ToDateTime(neededProperties[0].GetValue(value, null)) > Convert.ToDateTime(neededProperties[1].GetValue(value, null))) 
      { 
       isValid = false; 
      } 
     }  
     return isValid; 
    } 
} 

modeli: bilinmektedir testi

[Serializable] 
[CustomDateCompareValidator("DtStart", "DtEnd", ErrorMessage = "the start date is greater than that of the end.")] 
public class ProjModel 
{ 
    [Display(Name = "Codice:")] 
    [AllowHtml] 
    [AngleBracketsValidator(ErrorMessage = "Code can not contain angle bracket.")] 
    public string Code { get; set; } 

    [Display(Name = "Date Start:")] 
    public DateTime? DtStart { get; set; } 

    [Display(Name = "Date End:")] 
    public DateTime? DtEnd { get; set; } 

} 

ilk Doğrulayıcı iken köşeli parantez bu görüntülenir İkincisi, tarihlerin, görüntülenir. Fakat kuyruklar içinde adil bir değer yayınlarsam, köşeli parantezlerin geçerliliğini geçtiğimde, tarih doğrulayıcı görüntüleme hata mesajını verir. Bazı fikirler düzgün çalışmasını sağlamak için mi?

+1

Lütfen sorunuzun cevanini yeniden gönderin. Aslında neyin işe yaramadığını anlamak zor. – Mats

+0

Kötü ingilizcem için özür dilerim ... sorun şu anda iki doğrulayıcıyı görüntüleyemem. –

+0

'CustomDateCompareValidator' öğesini sınıfa uygulamıyorsunuz. Bunu modeldeki bir özelliğe uygularsınız - “DtEnd” deyin ve karşılaştırmak için diğer özelliği ('DtStart') sağlayın. İstemci tarafı doğrulaması da verecek bir [foolproof] (http://foolproof.codeplex.com/) '[GreaterThan]' veya benzer doğrulama özelliğini kullanmanızı öneririz. –

cevap

0

"Bu desteklenmiyor. Herhangi bir özellik düzeyi doğrulaması başarısız olursa, sınıf düzeyi doğrulamaları gerçekleştirilmez". Orijinaline bakın entry

İlgili konular