[MaxLength]
と[StringLength]
属性の動作の違いは何ですか?
私が知る限りでは([MaxLength]
配列の最大長を検証できることを除いて)、これらは同一で多少冗長ですか?
[MaxLength]
と[StringLength]
属性の動作の違いは何ですか?
私が知る限りでは([MaxLength]
配列の最大長を検証できることを除いて)、これらは同一で多少冗長ですか?
回答:
MaxLengthは、Entity Frameworkがデータベースを作成するときに文字列値フィールドを作成する大きさを決定するために使用されます。
MSDNから:
プロパティで許可される配列または文字列データの最大長を指定します。
StringLengthは、ユーザー入力の検証に使用されるデータ注釈です。
MSDNから:
データフィールドで許可される文字の最小長と最大長を指定します。
MaxLengthAttribute
、EFは認識しますStringLengthAttribute
[MaxLength]
、なぜErrorMessageがあるのですか?
別の投稿から学んだが、ドキュメントが見つからないように思われる、迅速で非常に役立つ追加情報(MSDNでリンクを共有できる人がいるとすれば、すばらしいでしょう):
これらの属性に関連付けられた検証メッセージは、実際には属性に関連付けられたプレースホルダーを置き換えます。例えば:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
文字数制限を超えている場合、 「住所の最大文字数は100文字です」と出力されます。
私が知っているプレースホルダーは次のとおりです。
最初にこれを指摘してくれたbloudraakに感謝します。
で[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; }
}
MaxLengthAttributeはMaxを意味します。許可される配列または文字列データの長さ
StringLengthAttributeは最小を意味します。と最大。データフィールドで使用できる文字の長さ
http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/にアクセスしてください
ダウン注意すべきもう一つのポイントはであるのMaxLengthのあなただけ提供できる属性の最大必要な範囲ではない分必要な範囲を。滞在中StringLengthにあなたが提供することができます両方を。
この属性を使用して、Webページ上のフォームからのテキストの最大入力長を制限する場合、StringLengthはmaxlength html属性を生成するようです(少なくともMVC 5を使用したテストでは)。選択するものは、これがテキストの最大長であることをユーザーに警告する方法に依存します。stringlength属性を使用すると、ユーザーは許可されている長さを超えて入力することはできなくなります。maxlength属性はこのhtml属性を追加せず、代わりにデータ検証属性を生成します。つまり、ユーザーは指定された長さを超えて入力でき、それ以上の入力を防ぐことは、次のフィールドに移動するか[送信]をクリックしたときのJavaScriptの検証に依存します(またはJavaScriptが無効になっている場合は、サーバー側の検証)。この場合、エラーメッセージによって制限をユーザーに通知できます。