StringLength VS的MaxLength属性ASP.NET MVC实体框架EF代码优先

问题描述 投票:136回答:8

是什么在[MaxLength][StringLength]属性的行为有什么区别?

据我可以告诉(所不同的是[MaxLength]可以验证一个阵列的最大长度),这些都是相同的,并且有些多余?

asp.net-mvc-3 ef-code-first entity-framework-4.1
8个回答
194
投票

MaxLength用于实体框架来决定如何大,以使一个字符串值字段时,它会创建数据库。

从MSDN:

指定允许在一个属性数组或字符串数​​据的最大长度。

StringLength是将被用于用户输入的验证数据注释。

从MSDN:

指定允许在一个数据字段中的字符的最小和最大长度。


38
投票

我刚刚从另一篇文章了解到,但似乎无法找到的文件有些快,但非常有用的附加信息(如果任何人都可以共享MSDN上的链接,这将是惊人的):

与这些属性相关的验证消息实际上将替换与属性相关联的占位符。例如:

[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }

请问如果超过字符限制输出如下:“地址可以有100个字符的最大”

我知道的占位符:

  • {0} =属性名称
  • {1} =最大长度
  • {2} =最小长度

许多感谢bloudraak的初步指出了这一点。


10
投票

以下是结果时,我们同时使用[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; }
 }

6
投票

所有好的答案...从验证的角度来看,我也注意到,得到的MaxLength仅在服务器端验证,而StringLength被在客户端验证过。


4
投票

MaxLengthAttribute意味着最大。允许阵列或字符串数​​据的长度

StringLengthAttribute指民。和最大值。个字符的长度被允许在数据字段中

访问http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/


3
投票

其中还有一点要注意下来是maxlength属性,你只能提供所需的最大射程不分钟要求的范围内。而在StringLength你可以同时提供。


0
投票

当使用以限制从网页上的形式的文本的最大输入长度属性,则StringLength似乎产生最大长度HTML属性(至少在我与MVC 5测试)。你想如何提醒,这是最大文本长度用户选择然后一个depnds。随着stringlength属性,用户将根本无法输入超出允许的长度。 maxlength属性不添加此HTML属性,而不是其产生的数据验证属性,这意味着,用户可以输入超过指定的长度,并且防止再输入他移动到下一个场或点击提交时取决于在JavaScript的验证(或如果JavaScript被禁用,服务器端验证)。在这种情况下,用户可以通过一个错误消息被通知的限制。


0
投票

我已经通过添加低于我的上下文行解决它:

modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);

不知怎的,[MaxLength]并没有为我工作。

© www.soinside.com 2019 - 2024. All rights reserved.