是否可以在ViewModel中复用DataAnnotations?在我的MVC应用程序中,我在域模型中定义了DataAnnotations。尽管在将域模型用作显示等时可以检索DataAnnotations属性,但在ViewModel上使用相同的属性并使用此ViewModel时,无法检索它们。我觉得在ViewModel中重新定义DataAnnotations似乎不太好。那么,我应该走哪条路呢?领域模型:publicclassIssue{[Key]publicintID{get;放;}[Required(ErrorMessage="Required")][Display(Name="ProjectNumber")]publicintProjectID{get;放;}[Required(ErrorMessage="Required")][Display(Name="IssueDefinition")]publicstringDescription{get;放;}//...为简洁起见删除//导航属性:publicvirtualICollectionFileAttachments{get;放;}}ViewModel:publicclassIssueViewModel{publicintID{get;放;}publicintProjectID{得到;放;}公共字符串描述{得到;放;}//...为简洁起见删除//导航属性:publicvirtualICollectionFileAttachments{get;放;您可以创建一个新的伴随类,其中包含有关属性和类的所有元数据。publicpartialclassIssueMetadata{[Required(ErrorMessage="Required")][Display(Name="ProjectNumber")]publicintProjectID{get;放;}[Required(ErrorMessage="Required")][Display(Name="IssueDefinition")]publicstringDescription{get;放;然后,我们必须通过MetadataType属性将合作伙伴类的信息告知MVC框架,该属性将合作伙伴类的类型作为其参数。合作伙伴类必须在同一命名空间中定义,并且还必须是分部类。[MetadataType(typeof(IssueMetadata))]publicpartialclassIssueViewModel{//...publicintProjectID{get;放;}公共字符串描述{得到;放;}//...}[MetadataType(typeof(IssueMetadata))]publicpartialclassIssue{[Key]publicintID{get;放;}publicintProjectID{得到;放;}公共字符串描述{得到;放;}//...为简洁起见删除//导航属性:publicvirtualICollectionFileAttachments{get;放;}}附加说明:如果IssueMetadata和IssueViewModel(或IssueViewModel)类在不同的程序集中,那么您可以在运行时将类与其好友类相关联,如下所示:问题),typeof(IssueMetadata));RegisterPairOfTypes(typeof(IssueViewModel),typeof(IssueMetadata));}privatestaticvoidRegisterPairOfTypes(TypemainType,TypeDescriptionProviderType){AssocinewAssociatedMetadataTypeTypeDescriptionProvider(mainType,buddyType);TypeDescriptor.AddProviderTransparent(typeDescriptionProvider,mainType);并且,只需在global.asax中调用此静态方法:AssociatedMetadataConfig.RegisterMetadatas();@StephenMuecke是对的DomainModel属性和ViewModel属性是不同的,您可以在模型中单独使用它们。但如果我是你,我会在这种情况下使用。您可以为ViewModel创建Partial类并从此ViewModel类继承您的DomainModel。比如:publicclassIssueVM{[Key]publicintID{get;放;}[Required(ErrorMessage="Required")][Display(Name="ProjectNumber")]publicintProjectID{get;放;}[Required(ErrorMessage="Required")][Display(Name="IssueDefinition")]publicstringDescription{get;放;}//...为简洁起见删除//导航属性:publicvirtualICollectionFileAttachments{get;放;}}publicclassIssueDM:IssueVM{//OtherFields}这样你就有了一个ViewModel的基类(更少的字段)和一个更大的类,其中有更多的字段用于数据库操作。您的ViewModel数据注释属性也以这种方式在DomainClass中继承。我认为这不是最好的方法,但我使用它并且效果很好。以上是C#学习教程:DataAnnotations可以在ViewModel中复用吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
