Thursday, April 24, 2008 7:53 PM
mairaw
ASP.NET Dynamic Data Attributes
Yesterday a new release of the ASP.NET Dynamic Data Preview was posted on Code Gallery.
Dynamic Data uses a data model to interact with the underlying database. From the data model, Dynamic Data reads the metadata information to perform some built-in operations, such as, type validations or a required field validation. But you can extend the data model and add some extra metadata to a table or a particular field by using attributes.
These attributes are in two namespaces: System.ComponentModel and System.ComponentModel.DataAnnotations.
Here is the list of attributes you can use:
| Attribute name |
Description |
Category |
| DisplayNameAttribute |
Specifies the header name for a column in the database. |
Display |
| DescriptionAttribute |
Provides a textual message that will popup when the mouse pointer is moved over a field during editing (tooltip). |
|
| DefaultValueAttribute |
Provides a default value for a field when inserting a new value. |
|
| DataTypeAttribute |
Adds additional information about a data field, that is commonly treated as a plain string. Options include:
- Custom
- DateTime
- Date
- Time
- Duration
- PhoneNumber
- Currency
- Text
- Html
- MultilineText
- EmailAddress
- Password
- Url
|
|
| DisplayColumnAttribute |
Specifies which column to display (in filters or in foreign key links). By default, Dynamic Data uses the first column of type string that it finds. |
|
| DisplayFormatAttribute |
Specifies a DataFormatString that can be used to format how numbers and dates are displayed. |
Display |
| MetadataTypeAttribute |
Specifies the class that provides metadata for an entity class. |
|
| RangeAttribute |
Provides range based validation where the value of a field must be between a min and max value. Built-in field controls will render this using a RangeValidator control. |
Validation |
| RegularExpressionAttribute |
Provides regular expression based validation where the value of a field must match a regular expression pattern. Built-in field controls will render the using a RegularExpressionValidator control. |
Validation |
| RequiredAttribute |
Specifies that the field is required. Built-in field controls will render this using a RequiredFieldValidator control. |
Validation |
| ScaffoldColumnAttribute |
Specifies if a data field is visible to the scaffolding mechanism. |
Display |
| ScaffoldTableAttribute |
Specifies if a table is visible to the scaffolding mechanism. |
Display |
| StringLengthAttribute |
Specifies the maximum length of a string. |
Validation |
| UIHintAttribute |
Specifies a field template to use to render the particular field. |
Display / Behavior |
To apply an attribute to a table or a particular field, you cannot change the class generated by the O/R Designer or you will end up losing the changes if you update the data model.
So the way you do this with Dynamic Data, is that you first create a partial class with name of your table. If the metadata refers to the table, you can apply the attribute in this partial class. For example:
[DisplayColumn("FirstName")]
public partial class Employee { }
But, when you want to add metadata to a particular field, you also need to create a special metadata class where you're going to apply the attribute to a particular field. And then, you're going to connect the partial entity class with this metadata class with the MetadataTypeAttribute, like in the following example:
[MetadataType(typeof(ProductMetaData))]
public partial class Product { }
public class ProductMetaData {
[DisplayFormat(DataFormatString = "{0:C}")]
public object UnitPrice { get; set; }
}
I'll keep posting on Dynamic Data!