[MaxLength]
和[StringLength]
属性的行为有何区别?
据我所知([MaxLength]
可以验证数组最大长度的例外),它们是相同的,并且有些多余吗?
[MaxLength]
和[StringLength]
属性的行为有何区别?
据我所知([MaxLength]
可以验证数组最大长度的例外),它们是相同的,并且有些多余吗?
Answers:
MaxLength用于实体框架,以决定创建数据库时将字符串值字段设置为多大。
从MSDN:
指定属性中允许的数组或字符串数据的最大长度。
StringLength是一个数据批注,将用于验证用户输入。
从MSDN:
指定数据字段中允许的字符的最小和最大长度。
MaxLengthAttribute
,而EF会识别StringLengthAttribute
[MaxLength]
会有一个ErrorMessage?
我刚刚从另一篇文章中学到了一些快速但极为有用的附加信息,但似乎找不到该文档的文档(如果有人可以在MSDN上共享指向该文档的链接,那将是惊人的):
与这些属性关联的验证消息实际上将替换与属性关联的占位符。例如:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
如果超出字符数限制,将输出以下内容: “地址最多可以包含100个字符”
我知道的占位符是:
非常感谢bloudraak最初指出了这一点。
以下是在中同时使用[MaxLength]
和[StringLength]
属性时的结果EF code first
。如果两者都使用,则[MaxLength]
赢得比赛。请参阅studentname
下面课程的列中的测试结果
public class Student
{
public Student () {}
[Key]
[Column(Order=1)]
public int StudentKey { get; set; }
//[MaxLength(50),StringLength(60)] //studentname column will be nvarchar(50)
//[StringLength(60)] //studentname column will be nvarchar(60)
[MaxLength(50)] //studentname column will be nvarchar(50)
public string StudentName { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
所有好的答案...从验证的角度来看,我还注意到MaxLength仅在服务器端进行验证,而StringLength也在客户端进行验证。
MaxLengthAttribute表示最大 允许的数组或字符串数据的长度
StringLengthAttribute表示最小值。和最大 数据字段中允许的字符长度
访问http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
需要注意的另一点是,在MaxLength属性中,您只能提供最大所需范围,而不能提供最小所需范围。在StringLength中,您可以同时提供两者。