ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

我不确定 ASP.NET MVC 但对于 EF 应该没有区别:stackoverflow.com/questions/5414611/…
当您更改它时,stringLength 不会影响迁移 col 的大小。
@CasBloem StringLength 实际上确实被 EntityFramework 拾取并且会影响列长度——至少在版本 6 中是这样。

S
Swaff

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

来自 MSDN:

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

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

来自 MSDN:

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


另请注意,默认情况下 MVC 3 不识别 MaxLengthAttribute,而 EF 识别 StringLengthAttribute
所以实际上不需要 MaxLength,因为您可以在 EF 中使用 StringLength,它还可以推断字符串字段的大小。那么他们为什么还要创建 MaxLength 呢?
@MattJohnson - 我似乎记得创建新 MaxLength 属性的决定是为了语义,因为 StringLength 暗示字符串数据,但 MaxLength 也可以应用于二进制数据。但这肯定是不方便的。
@MartinSmith - 我刚刚尝试使用 StringLength,它对我有用,我正在使用 EF6 RC1,所以我认为那里的评论不正确
那么为什么 [MaxLength] 会有 ErrorMessage 呢?
C
Community

我刚刚从另一篇文章中学到了一些快速但非常有用的附加信息,但似乎找不到相关文档(如果有人可以在 MSDN 上分享指向它的链接,那就太棒了):

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

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

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

我知道的占位符是:

{0} = 属性名称

{1} = 最大长度

{2} = 最小长度

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


g
gmail user

以下是我们在 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; }
 }

A
Abhishek Deo

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


N
Nilesh Moradiya

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


是的,但这大概就是为什么还有一个 MinLength 属性:msdn.microsoft.com/EN-US/library/gg696756(v=VS.110,d=hv.2).aspx
Z
Zonke-Bonke S'cekeleshe Msibi

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

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

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


L
LukasCwaj

您可以使用 :

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

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

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


Z
Zerotoinfinity

我已经通过在我的上下文中添加以下行来解决它:

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

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


K
Koen

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