3.2.4 其他数据注解
1.显示性的数据注解
我们都注意到,变量FirstName在页面上的可能显示为姓名,这样做才是符合实际需要的,要想这样做,我们就必须利用DisplayName:
[Required(ErrorMessage = "First Name is required")]
[DisplayName("姓名")]
[StringLength(160, MinimumLength = 3)]
public string Name { get; set; }
DisplayName显示模型属性设置友好的“显示名称”, 同样是为属性定义说明,还有另一种注解:Dispaly,它的作用并不仅仅是指定显示的内容,甚至能够指定显示的顺序,像是这样:
[Required(ErrorMessage = "First Name is required")]
[Display(Name = "姓名", order = 15000)]
[StringLength(160)]
public string Name { get; set; }
order的默认参数是10000,如果其他变量并没有设置order值,FirstName就排在其他变量后面。但实际上是不用这么麻烦的,如果不指定该值,就会按照变量声明的顺序排列。
Display在用于属性的显示名称上,具有更高的优先级。DisplayName专门用于定义属性的显示名称,但是Display并不仅仅是如此。
2.DisplayFormat
处理属性各种格式化选项,可以为运行时指定一个应用于属性值的格式化字符串,例如可用于设置日期的格式。
当属性包含空值,NullDisplayText,可以提供可选的显示文本。ConvertEmptyStringToNull,表示是否将传入的空字符串转换成Null。
也可以为包含标记的属性关闭HTML编码HtmlEncode。
[DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:c}")] public decimal Price { get; set; }
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime ReleaseDate { get; set; }
3.DataType
DataTypeAttribute 特性允许使用比数据库内部类型更加具体的类型来标记字段。 类型名称选自 DataType 枚举类型,如Email、Date、Time、PhoneNumber、Currency、EmailAddress、Pasword、Url、ImageUrl、CredtCard、PostCode、MultilineText等。DataType属性并不是验证属性,它们用来告诉视图引擎怎么去渲染HTML,比如DataType.Date只显示日期,并不包括时间。
需要配合使用@Html.Editor表单元素,才能出现验证效果,否则不起作用。
(1)密码
[DataType(DataType.Password)]
public String Password { get; set; }
(2)多行文本框
[DataType(DataType.MultilineText)] public string Message { get; set; }
(3)日期
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public DateTime EnrollmentDate { get; set; }
DataType.Date表示不带时间成分的日期,它不指定日期的显示格式。DisplayFormat属性用于显示指定日期格式。
从上面可以看出,DataType所谓的数据类型,并不是我们常说的int,float等,事实上,DataType本身也有一个可支持的数据类型枚举:
public enum DataType{
Custom, DateTime, Date, Time, Duration,
PhoneNumber, Currency, Text, Html, MultilineText,
EmailAddress, Password, Url, ImageUrl, CreditCard,
PostalCode, Upload
}
4.Table和Column
如果希望数据库中的表和列的名字,与模型类不一致,可以使用Table和Column。
(1)Table
您可以用 Table 特性指定该表的名称。举例来说,下面的注释指定表名称为 InternalBlogs。
[Table("InternalBlogs")] public class Blog
(2)Column
注释更适于用来指定被映射列的特性。您可以规定名称、数据类型甚至列出现在表中的顺序。下面是 Column 特性的示例。
[Column(“BlogDescription", TypeName="ntext")] public String Description {get;set;}
下面是重新生成后的表。表名称已更改为 InternalBlogs, Description 列现在是 BlogDescription。
5.关系特性:InverseProperty 和 ForeignKey
6.TimeStamp
7.ConcurrencyCheck