Click here to Skip to main content
11,482,373 members (70,169 online)
Rate this: bad
good
Please Sign up or sign in to vote.
See more: validation Attributes , +
question: how can you keep things DRY by only applying metadata information for dataannotations and validation on the master class, and then reuse this on the viewmodels?

example:
class book (domain model) and the metadata

Imports System.ComponentModel.DataAnnotations
 
<MetadataType(GetType(BookMetaData))>
Public Class Book
    Public Property BookID As Integer
 
    Public Property Title As String
    Public Property Author As String
 
    Public Property ISBN As String
End Class
 
Public Class BookMetaData
    <Key()>
    Public Property BookID As Integer
 
    <Display(name:="Book Title")>
    <StringLength(150)>
    Public Property Title As String
    <Display(name:="Author Name")>
    <StringLength(50)>
    Public Property Author As String
 
    Public Property ISBN As String
End Class

then trying to apply the same dataannotations to a viewmodel BookTitleViewModel with only some fields of the original class
Imports System.ComponentModel.DataAnnotations
<MetadataType(GetType(BookMetaData))>
Public Class BookTitleViewModel
    Public Property BookID As Integer
 
    Public Property Title As String
End Class

this throws an error, because not all fields are present:
The associated metadata type for type 'MvcApplicationMetaData.BookTitleViewModel' contains the following unknown properties or fields: Author, ISBN. Please make sure that the names of these members match the names of the properties on the main type.

how can I apply the metadata for just the existing fields?
Posted 3-May-13 4:30am

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



Advertise | Privacy | Mobile
Web03 | 2.8.150520.1 | Last Updated 3 May 2013
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100