private ModelValidator GetValidator(EasyModelMetaData metadata, ControllerContext context, ValidatorBase validator)
 {
     if (string.IsNullOrEmpty(validator.DisplayName))
     {
         validator.DisplayName = string.IsNullOrEmpty(metadata.HtmlTag.DisplayName) ? metadata.HtmlTag.Name : metadata.HtmlTag.DisplayName;
     }
     if (validator is RequiredValidator)
     {
         return new Validator.RequiredModelValidator(metadata, context, (RequiredValidator)validator);
     }
     if (validator is RangeValidator)
     {
         return new Validator.RangeModelValidator(metadata, context, (RangeValidator)validator);
     }
     if (validator is RegularValidator)
     {
         return new Validator.RegularModelValidator(metadata, context, (RegularValidator)validator);
     }
     if (validator is RemoteValidator)
     {
         return new Validator.RemoteModelValidator(metadata, context, (RemoteValidator)validator);
     }
     if (validator is StringLengthValidator)
     {
         return new Validator.StringLengthModelValidator(metadata, context, (StringLengthValidator)validator);
     }
     return null;
 }
 public override IEnumerable<ModelMetadata> GetMetadataForProperties(object container, Type containerType)
 {
     List<EasyModelMetaData> result = new List<EasyModelMetaData>();
     foreach (var item in containerType.GetProperties())
     {
         EasyModelMetaData emMetaData = new EasyModelMetaData(this, containerType, null, item.PropertyType, item.Name);
         result.Add(emMetaData);
     }
     return result;
 }
 public override ModelMetadata GetMetadataForType(Func<object> modelAccessor, Type modelType)
 {
     EasyModelMetaData emMetaData = new EasyModelMetaData(this, null, modelAccessor, modelType, null);
     return emMetaData;
 }
 public override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, string propertyName)
 {
     EasyModelMetaData emMetaData = new EasyModelMetaData(this, containerType, modelAccessor, containerType.GetProperty(propertyName).PropertyType, propertyName);
     return emMetaData;
 }