[MaxLength]
和[StringLength]
属性的行为差异是什么?
据我所知(除了[MaxLength]
可以验证数组的最大长度),这些是相同的,有些多余吗?
MaxLength用于实体框架在创建数据库时决定字符串值字段的大小。
从MSDN:指定数组的最大长度或属性中允许的字符串数据。
StringLength是一个数据注释,用于验证用户输入。
从MSDN:最小值和最大值允许的字符长度
一些快速但非常有用的附加信息,我刚从另一篇文章中学到,但似乎找不到文档(如果有人能在MSDN上分享一个链接,那将是惊人的):
与这些属性相关联的验证消息实际上会替换与这些属性相关联的占位符。例如:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
如果超过字符限制将输出以下内容:"地址不超过100个字符"
我知道的占位符是:
- {0} =属性名
- {1} =最大长度
- {2} =最小长度
非常感谢blooudraak最初指出这一点。
以下是我们在EF code first
中同时使用[MaxLength]
和[StringLength]
属性时的结果。如果两者都使用,[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也在客户端进行验证。
另一点要注意的是,在MaxLength属性中,您只能提供max所需范围,而不是min所需范围。在StringLength中可以同时提供和。
MaxLengthAttribute表示最大长度。允许的数组或字符串数据长度
StringLengthAttribute表示最小值和最大值。数据字段中允许的字符长度
访问http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
您可以使用:
[StringLength(8, ErrorMessage = "{0} length must be between {2} and {1}.", MinimumLength = 6)]
public string Address { get; set; }
上述代码产生的错误信息为"地址长度必须在6到8之间"。
MSDN: https://learn.microsoft.com/en - us/aspnet/core/mvc/models/validation?view=aspnetcore - 5.0
我通过在我的上下文中添加下面一行来解决这个问题:
modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);
不知怎么的,[MaxLength]
对我不起作用
当使用该属性来限制网页上表单文本的最大输入长度时,StringLength似乎会生成maxlength html属性(至少在我的MVC 5测试中是这样)。选择哪一个取决于你想如何提醒用户这是最大文本长度。使用stringlength属性,用户将无法键入超出允许长度的内容。maxlength属性不添加这个html属性,而是生成数据验证属性,这意味着用户可以键入超过指定长度的内容,并且当他移动到下一个字段或单击提交时,防止更长的输入取决于javascript中的验证(或者如果javascript被禁用,则服务器端验证)。在这种情况下,可以通过错误消息通知用户限制。