I wish to set an attribute on a public property in .NET, however I do not have access to the explicit property itself, as this has been code generated in another file.
I have this field:
public virtual string Name { get; set; }
I wish to set this:
[ValidateNonEmpty("Name is required", ExecutionOrder = 1)]
public virtual string Name { get; set; }
My class is marked as partial, but you cannot have partial properties. I thought I was on to something with the MetadataType class which is a new feature of Dynamic Data and DataAnnotations, but alas I feel it can only be used with Dynamic Data, is this true?
Citations: http://blogs.oosterkamp.nl/blogs/jowen/archive/2008/10/16/metadatatype-attribute.aspx http://blogs.msdn.com/davidebb/archive/2008/06/16/dynamic-data-and-the-associated-metadata-class.aspx
Is there any way I can set this attributes (even through web.config!) without touching the code generated class?
Thanks in advance, Graham
This is a known nuisance; you simply can't add metadata to the generated members.
There are 6 options here (in order of increasing effort):
[ValidateNonEmpty("Name", "Name is required", ExecutionOrder = 1)]
- then add multiple attributes to the partial class definitionTypeDescriptionProvider
to provide dynamic metadata (lots and lots of work) - assuming that the consumer respects TypeDescriptor
; most binding-related consumers do, but for example, Expression
(used by many LINQ providers) doesn'tI usually have success with the first option, unless it is a system-defined attribute ([DisplayName]
, etc). If [ValidateNonEmpty]
is defined by dynamic data, then you might not be able to do this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With