web-dev-qa-db-ja.com

StringLengthとMaxLength属性ASP.NET MVC with Entity Framework EF Code First

[MaxLength]属性と[StringLength]属性の動作の違いは何ですか?

私が知る限り([MaxLength]が配列の最大長を検証できることを除いて)、これらは同一であり、いくらか冗長ですか?

139

MaxLength は、データベースの作成時に文字列値フィールドをどのくらい大きくするかを決定するために、Entity Frameworkに使用されます。

MSDNから:

プロパティで許可される配列または文字列データの最大長を指定します。

StringLength は、ユーザー入力の検証に使用されるデータ注釈です。

MSDNから:

データフィールドで許可される文字の最小長と最大長を指定します。

193
Swaff

別の投稿から学んだばかりの、非常に役立つ簡単な追加情報がありますが、ドキュメントが見つからないようです(MSDNでリンクを共有できる場合は素晴らしいと思います)。

これらの属性に関連付けられた検証メッセージは、実際に属性に関連付けられたプレースホルダーを置き換えます。例えば:

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

文字数の制限を超えている場合、次を出力します。 "アドレスは最大100文字です"

私が知っているプレースホルダーは次のとおりです。

  • {0} =プロパティ名
  • {1} =最大長
  • {2} =最小長

最初にこれを指摘してくれた bloudraak に感謝します。

38
DamienMann

以下は、[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; }
 }
10
gmail user

すべての良い答え...検証の観点から、MaxLengthはサーバー側でのみ検証され、StringLengthはクライアント側でも検証されることに気付きました。

6
Abhishek Deo

MaxLengthAttributeはMaxを意味します。配列または文字列データの長さを許可

StringLengthAttributeは最小を意味します。および最大データフィールドで許可される文字の長さ

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

書き留めておくべきもう1つのポイントは、MaxLength属性で、提供できるのはmin必須範囲ではなくmax必須範囲のみです。 StringLengthで、bothを指定できます。

3
Nilesh Moradiya

属性を使用してWebページ上のフォームからのテキストの最大入力長を制限すると、StringLengthがmaxlength html属性を生成するようです(少なくともMVC 5のテストでは)。選択するものは、これがテキストの最大長であることをユーザーに警告する方法を決定します。 stringlength属性を使用すると、ユーザーは許可された長さを超えて入力することができなくなります。 maxlength属性はこのhtml属性を追加せず、代わりにデータ検証属性を生成します。つまり、ユーザーは指定された長さを超えて入力できます。 JavaScriptが無効になっている場合、サーバー側の検証)。この場合、ユーザーに制限をエラーメッセージで通知できます。

0
Koen

私のコンテキストで以下の行を追加して解決しました:

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

どういうわけか、[MaxLength]が機能しませんでした。

0
Zerotoinfinity