将IClientValidatable保留在模型层之外

时间:2013-10-28 16:10:40

标签: asp.net-mvc data-annotations custom-attributes separation-of-concerns

我正在使用数据注释来验证我的模型类。我也写了几个自定义属性。最终,该模型被推送到ASP.NET MVC中构建的Web界面,但我希望保持关注点的清晰分离,因此模型类具有自己的程序集(控制台应用程序也将使用它)。必须在模型层中使用IClientValidatable接口(这是一个Web关注点)打破了我的目标松散耦合。有想法该怎么解决这个吗?感谢。

1 个答案:

答案 0 :(得分:2)

您可以为数据注释属性添加适配器。

例如,您有MyValidationAttribute。

您需要添加以下适配器:

 public class MyValidationAttributeAdapter  : DataAnnotationsModelValidator<MyValidationAttribute>
    {
        public MyValidationAttributeAdapter(ModelMetadata metadata, ControllerContext context, MyValidationAttribute attribute) : base(metadata, context, attribute)
        {
        }

        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            //return client rule here
            return base.GetClientValidationRules();
        }
    }

在应用程序开始的某处添加代码,注册此适配器:

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(MyValidationAttribute), typeof(MyValidationAttributeAdapter));