字符串长度与最大长度属性 ASP.NET MVC 与实体框架 EF 代码优先

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

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

147787 次浏览

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

来自 MSDN:

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

StringLlength 是用于验证用户输入的数据注释。

来自 MSDN:

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

另一点需要注意的是,在 最大长度属性中,你只能提供 Max所需的范围,而不能提供 所需的范围。 而在 字符串长度你可以提供 都有

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

StringLengthAttribute 表示数据字段中允许的最小和最大字符长度

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

都是好答案... ... 从验证的角度来看,我还注意到 MaxLlength 只在服务器端得到验证,而 StringLlength 也在客户端得到验证。

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

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

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

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

我所知道的占位符是:

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

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

下面是在 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; }
}

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

我已经解决了这个问题,在我的上下文中添加了以下内容:

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

不知怎么的 [MaxLength]对我不起作用。

你可使用:

[StringLength(8, ErrorMessage = "{0} length must be between {2} and {1}.", MinimumLength = 6)]
public string Address { get; set; }

前面的代码创建的错误消息是“地址长度必须在6到8之间”。

https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-5.0