0

私のasp.net mvc 3プロジェクトでは、検証が必要なプロパティで [Required] 属性を使用しています。また、ModelState.AddModelError を使用して、同じプロパティ (属性付き) にエラーを追加します。2 番目の方法で追加されたエラーは表示されません。その理由は何ですか?

コードは次のとおりです。

1) 属性を持つプロパティ

[Required(ErrorMessage = "Product name is required")]
        public string Name { get; set; }

2) コントローラー アクション メソッド内

if (p.Name.Length < 3)
   ModelState.AddModelError("Name",
      "Product name should be at least 3 characters long");

3) ビューで

@Html.EditorFor(i => i.CurrentItem.Product.Name)
        Html.ValidationMessageFor(i => i.CurrentItem.Product.Name)
        @Html.ValidationMessage("Name")

では、属性と ModelState の両方を使用することはできませんか?

4

2 に答える 2

1

実装が機能しない理由については、 AddModelError の最初のパラメーターが、ビューが強く型付けされている型に基づいたプロパティへの完全修飾パスである必要があるためです。あなたの場合、「CurrentItem.Product.Name」になると思います

Fluent Validation ライブラリの使用をお勧めします。カスタム検証を記述し、ModelState への追加を処理することができます。それは非常にうれしいです。

流暢な検証: http://fluentvalidation.codeplex.com/

于 2013-01-23T16:46:45.823 に答える
1

StringLength属性を追加することで同じことを実現できます。

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)]

100最大長と最小長はどこにありますか3

于 2013-01-23T16:48:39.350 に答える