none
Validation personnalisée RRS feed

  • Question

  • Bonjour,

    C'est la première fois que je pose une question sur c'est forum et j'espère de tous cœur avoir une réponse.

    Trêve de bavardage, voici mon problème. j'ai créer une validation personnalisée discrète et coté serveur. La validation discrète fonctionne à merveille, mon problème est côté serveur. MA méthode IsValid(object value, ValidationContext validationContext) fonctionne mal, mon paramètre value n'est pas à null mais il n'est jamais initialisé, je veux dire que si c'est un int sa valeur est toujours à 0, si c'est un datetime sa valeur est toujours 01/01/0001 00:00:00, même quand j’essaie de créer une validation personnalisée côté serveur seulement le résultat est le même.

    Pour l'accès aux données j'utilise EntityFramework.

    voici un des test que j'ai fait pour côté serveur seulement:

       [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true)]
        public class PlusGrandQueAttribute : ValidationAttribute
        {
            public string dateDepart;
    
            public PlusGrandQueAttribute(string DateDepart, string errorMessage)
                : base(errorMessage)
            {
                this.dateDepart = DateDepart;
            }
    
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                ValidationResult validationResult = ValidationResult.Success;
                try
                {
                    var minDateInfo = validationContext.ObjectType.GetProperty(this.dateDepart);
    
                    if (minDateInfo.PropertyType == new DateTime().GetType()) //Valide que c'est bien une date que l'on a reçu en parametre
                    {
                        var dateA_Valider = (DateTime)value;
                        var dateDeReference = (DateTime)minDateInfo.GetValue(validationContext.ObjectInstance, null);
    
                        if (dateA_Valider.CompareTo(dateDeReference) < 1)
                        {
                            validationResult = new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
                        }
                    }
                    else
                    {
                        validationResult = new ValidationResult("Une erreur c'est produite lors de la validation de la propriete. la propriete n'est pas de type DateTime ou est a null.");
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return validationResult;
            }
    
            public override string FormatErrorMessage(string name)
            {
                return string.Format(ErrorMessageString, name, dateDepart);
            }
        }

    Et pour la class à valider :

    namespace DXWebAppvalid.Models.GuideTI
    {
        public interface IMULTI_MIN_MAX_VALIDATION
        {
            int MIN_MAX_ID { get; set; }
            int PIN_ID { get; set; }
            int PAR_ID { get; set; }
            int FUN_ID { get; set; }
            string PIN_LOCALISATION { get; set; }
            [DisplayName("Borne_De_Depart")]
            [Required(ErrorMessage = "Une borne de depart est requise.")]
            System.DateTime DATE_DU { get; set; }
            [DisplayName("Borne_De_Fin")]
            [Required(ErrorMessage = "Une borne de fin est requise.")]
            [PlusGrandQue("DATE_DU", "La {0} doit-etre posterieur a la {1}.")]
            System.DateTime DATE_AU { get; set; }
            Nullable<decimal> PIN_QTY_ON_HAND { get; set; }
            [Required(ErrorMessage = "Une quantité minimum est requise.")]
            Nullable<decimal> PIN_QTY_MIN_LEVEL { get; set; }
            [Required(ErrorMessage = "Une quantité maximal est requise.")]
            Nullable<decimal> PIN_QTY_MAX_LEVEL { get; set; }
            bool PIN_INACTIVE { get; set; }
            string FUN_CODE { get; set; }
        }
    
        [MetadataType(typeof(IMULTI_MIN_MAX_VALIDATION))]
        public partial class MULTI_MIN_MAX : IMULTI_MIN_MAX_VALIDATION
        {
        }
    }

    Merci à l'avance.

    } {Objet} System.DateTime
    <textarea style="height:80px;width:444px;border:1px solid grey;padding:2px;"></textarea><select><option value="af">Afrikaans</option><option value="sq">Albanian</option><option value="ar">Arabic</option><option value="hy">Armenian</option><option value="az">Azerbaijani</option><option value="eu">Basque</option><option value="be">Belarusian</option><option value="bg">Bulgarian</option><option value="ca">Catalan</option><option value="zh-CN">Chinese (Simplified)</option><option value="zh-TW">Chinese (Traditional)</option><option value="hr">Croatian</option><option value="cs">Czech</option><option value="da">Danish</option><option selected="selected" value="auto">Detect language</option><option value="nl">Dutch</option><option value="en">English</option><option value="et">Estonian</option><option value="tl">Filipino</option><option value="fi">Finnish</option><option value="fr">French</option><option value="gl">Galician</option><option value="ka">Georgian</option><option value="de">German</option><option value="el">Greek</option><option value="ht">Haitian Creole</option><option value="iw">Hebrew</option><option value="hi">Hindi</option><option value="hu">Hungarian</option><option value="is">Icelandic</option><option value="id">Indonesian</option><option value="ga">Irish</option><option value="it">Italian</option><option value="ja">Japanese</option><option value="ko">Korean</option><option value="la">Latin</option><option value="lv">Latvian</option><option value="lt">Lithuanian</option><option value="mk">Macedonian</option><option value="ms">Malay</option><option value="mt">Maltese</option><option value="no">Norwegian</option><option value="fa">Persian</option><option value="pl">Polish</option><option value="pt">Portuguese</option><option value="ro">Romanian</option><option value="ru">Russian</option><option value="sr">Serbian</option><option value="sk">Slovak</option><option value="sl">Slovenian</option><option value="es">Spanish</option><option value="sw">Swahili</option><option value="sv">Swedish</option><option value="th">Thai</option><option value="tr">Turkish</option><option value="uk">Ukrainian</option><option value="ur">Urdu</option><option value="vi">Vietnamese</option><option value="cy">Welsh</option><option value="yi">Yiddish</option></select><select><option value="af">Afrikaans</option><option value="sq">Albanian</option><option value="ar">Arabic</option><option value="hy">Armenian</option><option value="az">Azerbaijani</option><option value="eu">Basque</option><option value="be">Belarusian</option><option value="bg">Bulgarian</option><option value="ca">Catalan</option><option value="zh-CN">Chinese (Simplified)</option><option value="zh-TW">Chinese (Traditional)</option><option value="hr">Croatian</option><option value="cs">Czech</option><option value="da">Danish</option><option value="nl">Dutch</option><option value="en">English</option><option value="et">Estonian</option><option value="tl">Filipino</option><option value="fi">Finnish</option><option selected="selected" value="fr">French</option><option value="gl">Galician</option><option value="ka">Georgian</option><option value="de">German</option><option value="el">Greek</option><option value="ht">Haitian Creole</option><option value="iw">Hebrew</option><option value="hi">Hindi</option><option value="hu">Hungarian</option><option value="is">Icelandic</option><option value="id">Indonesian</option><option value="ga">Irish</option><option value="it">Italian</option><option value="ja">Japanese</option><option value="ko">Korean</option><option value="la">Latin</option><option value="lv">Latvian</option><option value="lt">Lithuanian</option><option value="mk">Macedonian</option><option value="ms">Malay</option><option value="mt">Maltese</option><option value="no">Norwegian</option><option value="fa">Persian</option><option value="pl">Polish</option><option value="pt">Portuguese</option><option value="ro">Romanian</option><option value="ru">Russian</option><option value="sr">Serbian</option><option value="sk">Slovak</option><option value="sl">Slovenian</option><option value="es">Spanish</option><option value="sw">Swahili</option><option value="sv">Swedish</option><option value="th">Thai</option><option value="tr">Turkish</option><option value="uk">Ukrainian</option><option value="ur">Urdu</option><option value="vi">Vietnamese</option><option value="cy">Welsh</option><option value="yi">Yiddish</option></select>
    English (détecté automatiquement) » French

    vendredi 16 janvier 2015 15:43