我希望将数据注释属性和IClientValidatable接口放在两个独立的程序集中,以便分离关注点。一种称为通用,另一种称为Comman.Web。
这些链接解释了它在MVC 5中的工作原理:
Keeping IClientValidatable outside the model layer
http://www.eidias.com/blog/2012/5/25/mvc-custom-validator-with-client-side-validation
不幸的是,在MVC6中没有
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(MyValidationAttribute),
typeof(MyValidationAttributeAdapter)
);它在ASP.net核心MVC6中是如何工作的?我使用RC1。
发布于 2016-04-19 00:56:44
在Startup.cs的ConfigureServices方法中:
services.AddMvc(options =>
{
options.ModelValidatorProviders.Insert(0, new CustomModelValidatorProvider());
});随着ASP.NET Core1.0API的更改,您必须调整您的代码。您可以在asp.net存储库中找到一个示例实现:DataAnnotationsModelValidatorProvider.cs
发布于 2016-10-01 02:28:49
在ASP.net Core1.0中,我可以通过替换IValidationAttributeAdapterProvider服务来做到这一点。
public class CustomValidationAttributeAdapterProvider : IValidationAttributeAdapterProvider
{
public IValidationAttributeAdapterProvider internalImpl;
public CustomValidationAttributeAdapterProvider()
{
internalImpl = new ValidationAttributeAdapterProvider();
}
public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer)
{
IAttributeAdapter adapter = internalImpl.GetAttributeAdapter(attribute, stringLocalizer);
if (adapter == null)
{
var type = attribute.GetType();
if (type == typeof(CustomValidatorAttribute))
{
adapter = new CustomNumberValidatorAdapter((CustomValidatorAttribute)attribute, stringLocalizer);
}
}
return adapter;
}
}在启动ConfigureServices中
if (services.Any(f => f.ServiceType == typeof(IValidationAttributeAdapterProvider)))
{
services.Remove(services.Single(f => f.ServiceType == typeof(IValidationAttributeAdapterProvider)));
}
services.AddScoped<IValidationAttributeAdapterProvider, CustomValidationAttributeAdapterProvider>();https://stackoverflow.com/questions/36692627
复制相似问题