基于DataType的模型验证

时间:2012-03-08 11:16:22

标签: c# asp.net-mvc

我有一个项目,具有经典的3层结构:DataStore,BusinessLogic,Web-Frontend

在DataStore中我有一个模型(简化),例如ConfigModel.cs:

public class ConfigModel
{

    [DataType(DataType.EmailAddress)]
    public string DefaultSenderEmail { get; set; }

    public IPAddress FallbackDNS { get; set; }

}

问题出现了:

根据实际的DataType或DataType属性以编程方式添加Validators的优雅方法是什么?

到目前为止,我已经考虑过几个答案,但没有找到令人满意的答案:

  • 为参数添加[EmailAddress]验证属性:我不想复制,我不希望在我的DataStore层中引用任何MVC特定代码。

  • 制作单独的ViewModel并使用AutoMapper:由于我的某些模型比这复杂得多,我讨厌制作特定的ViewModel。

谢谢!

2 个答案:

答案 0 :(得分:1)

我也会考虑使用AutoMapper,但不能作为这个解决方案的答案。

也许你可以考虑这个:http://weblogs.asp.net/srkirkland/archive/2011/02/15/adding-client-validation-to-dataannotations-datatype-attribute.aspx

答案 1 :(得分:0)

这不重复。 DataType用于不同的目的,验证是不同的事情。虽然它们可能听起来相同(特别是对于EmailAddress),但您不应该考虑将它们用作复制。此外,验证是针对非可空类型自动控制的 - 它们被标记为Required。还会自动检查日期时间的有效格式。

当您使用不同的视图时,您肯定讨厌的是控制用户使用BindAttribute编辑域模型的哪些属性并控制同一模型上的不同验证。所以去使用ViewModels吧!使用Web应用程序所需的所有属性装饰它们,并使用AutoMapper

映射回域模型

您还可以查看FluentValidation