【发布时间】:2017-01-13 23:48:20
【问题描述】:
我使用从ModelClientValidationRule 类返回验证参数的validator.GetClientValidationRules() 方法。而且,它适用于所有验证属性,但遗憾的是不适用于 ASP.Net Core。是否有一些公共 API 可以用来从 ASP.Net Core 中的验证属性中获取验证参数?
我的模特:
public class Movie {
public int ID { get; set; }
[StringLength(60, MinimumLength = 3)]
public string Title { get; set; }
[Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
[Required]
[StringLength(30)]
public string Genre { get; set; }
[Range(1, 100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
[RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
[StringLength(5)]
public string Rating { get; set; }
}
这是我通过模型的属性名称生成客户端验证规则的方法:
IEnumerable<IDictionary<string, object>> GetValidationRulesByPropertyName(string propertyName) {
IList<IDictionary<string, object>> clientValidationRules = new List<IDictionary<string, object>>();
ModelMetadata modelMetaData = ModelMetadata.FromStringExpression(propertyName, this.ViewContext.ViewData);
IEnumerable<ModelValidator> validators = ModelValidatorProviders.Providers.GetValidators(modelMetaData, this.ViewContext);
foreach(ModelValidator validator in validators) {
foreach(ModelClientValidationRule rule in validator.GetClientValidationRules()) {
IDictionary<string, object> clientValidationRule = new Dictionary<string, object>() {
["type"] = rule.ValidationType,
["message"] = rule.ErrorMessage
};
rule.ValidationParameters.AddTo(clientValidationRule);
clientValidationRules.Add(clientValidationRule);
}
}
return clientValidationRules;
}
}
【问题讨论】:
标签: c# .net asp.net-mvc asp.net-core