StringLength vs MaxLength将ASP.NET MVC与Entity Framework EF Code First相关联

时间:2011-04-19 13:23:23

标签: asp.net-mvc-3 ef-code-first entity-framework-4.1

[MaxLength][StringLength]属性的行为有何不同?

据我所知(除了[MaxLength]可以验证数组的最大长度)这些是相同的并且有点多余?

8 个答案:

答案 0 :(得分:191)

MaxLength用于实体框架,以决定在创建数据库时创建字符串值字段的大小。

来自MSDN:

  

指定数组的最大长度   或属性中允许的字符串数据。

StringLength是一个数据注释,将用于验证用户输入。

来自MSDN:

  

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

答案 1 :(得分:37)

我刚刚从另一篇文章中学到的一些快速但非常有用的附加信息,但似乎无法找到文档(如果有人可以在MSDN上共享它的链接那将是惊人的):

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

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

如果超过字符限制,将输出以下内容: “地址最多可包含100个字符”

我所知道的占位符是:

  • {0} =物业名称
  • {1} =最大长度
  • {2} =最小长度

非常感谢bloudraak最初指出这一点。

答案 2 :(得分: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; }
 }

答案 3 :(得分:6)

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

答案 4 :(得分:4)

MaxLengthAttribute表示最大值。允许的数组长度或字符串数​​据

StringLengthAttribute表示Min。最多数据字段中允许的字符长度

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

答案 5 :(得分:3)

要注意的另一点是 MaxLength 属性,您只能提供最大所需范围,而不是 min 所需范围。 在 StringLength 中,您可以提供两者

答案 6 :(得分:0)

当使用该属性来限制网页上表单中文本的最大输入长度时,StringLength似乎生成了maxlength html属性(至少在我的MVC 5测试中)。然后,要选择的那个会依赖于您希望如何提醒用户这是最大文本长度。使用stringlength属性,用户将无法键入超出允许的长度。 maxlength属性不会添加此html属性,而是生成数据验证属性,这意味着用户可以键入超出指定的长度,并且防止更长的输入取决于javascript移动到下一个字段或点击提交时的验证(或者如果禁用了javascript,则服务器端验证)。在这种情况下,可以通过错误消息向用户通知限制。

答案 7 :(得分:0)

我通过在上下文中添加以下行来解决此问题:

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

不知何故,[MaxLength]对我不起作用。