web-dev-qa-db-ja.com

DataAnnotations StringLength属性MVC-最大値なし

私はMVC4のモデル検証にデータ注釈を使用しており、現在StringLengthAttributeを使用していますが、最大値(現在50に設定されています)を指定したくないが、最小文字列長値を指定したいです。

最小の長さのみを指定する方法はありますか?おそらく別の属性を使用できますか?

私の現在のコードは:

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Confirm New Password")]
    [StringLength(50, MinimumLength = 7)]
    [CompareAttribute("NewPassword", ErrorMessage = "The New Password and Confirm New Password fields did not match.")]
    public string ConfirmNewPassword { get; set; }

どんな助けも大歓迎です。

27
davey1990

最小の長さのみを指定する方法はありますか?おそらく別の属性を使用できますか?

標準データアノテーションを使用して、いいえ。MaximumLengthを指定する必要があります。他のパラメーターのみがオプションです

このような場合、次のようなものをお勧めします。

[StringLength(int.MaxValue, MinimumLength = 7)]

次のような正規表現(正規表現)属性を使用することもできます。

[RegularExpression(@"^(?:.*[a-z]){7,}$", ErrorMessage = "String length must be greater than or equal 7 characters.")]

詳細はこちら: 正規表現によるパスワード強度検証

43

この目的のために[MinLength(7)]属性もあります。

ソース: https://msdn.Microsoft.com/en-us/library/system.componentmodel.dataannotations.minlengthattribute(v = vs.110).aspx

7
BigTone

データ注釈を削除し、ビューのHtml.TextBoxFor要素にHtml属性を追加することを考えましたか?

次のようになります。

@Html.TextBoxFor(model => model.Full_Name, new { htmlAttributes = new { @class = "form-control", @minlength = "10" } })

または

@Html.TextBoxFor(model => model.Full_Name, new { @class = "form-control",  @minlength = "10" } })

10は、選択した最小の長さです。

Html属性をビューに追加して、その影響をすばやく確認できるようにします。データベースをいじることなく、移行を使用する場合は移行とデータベースの更新を実行する必要はありません(コードファーストアプローチ)。

editorForをTextBoxForに変更すると、スタイリングは失われますが、簡単に修正できるはずであることに注意してください。スタイルをビューに追加したり、CSSファイルにスタイリングを追加したりできます。

お役に立てれば :)

1
Francois Muller

素晴らしい仕事のフランソワ、データ注釈を使用して入力フィールドのmaxlength属性を発行することはできないようです。クライアント側の検証を提供するだけです。 HTML属性でmaxlengthを使用すると、maxlengthが正しく設定された入力フィールドが作成されました。

@Html.EditorFor(model => model.Audit_Document_Action, new { htmlAttributes = new { @class = "form-control", @maxlength = "10" } })
0
Madog