【问题标题】:Keeping IClientValidatable outside the model layer将 IClientValidatable 保持在模型层之外
【发布时间】:2013-11-07 12:25:43
【问题描述】:

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

【问题讨论】:

  • 经过这么多小时研究带有客户端验证的RequiredIf 自定义注释后,看来您是唯一一个认为将客户端部分与域分开的人! (谢谢提问,省了我的麻烦)

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


【解决方案1】:

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

例如,您有 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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-21
    • 2010-10-28
    • 2016-09-22
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多