0

複数の ASP.NET MVC Web アプリケーションをサポートする Entity Framework 4.1 モデルがあります。DataAnnotations を使用して、ラベル テキスト、検証ルール、およびエラー メッセージを定義およびローカライズします。

一部のアプリケーションでは、特定のフィールドのラベル テキストを標準のモデル定義テキストとは異なるものにする必要があります。これは、ラベル自体で簡単に実現できます。必要なテキストを、ビューに関連付けられたローカル リソース ファイルから取得します。ただし、ラベル テキストは、「{fieldname} の最大長は 50 文字である必要があります」などの検証エラー メッセージでも使用されます。

モデルクラスの注釈を変更せずに検証メッセージを変更する最良の方法は何ですか?

4

2 に答える 2

2

次のように、特定のケースのコントローラーでエラー メッセージを再定義してみてください。

モデル:

public class Company
    {
        [Required(ErrorMessage = "The field is required")]
        public string CompanyName { get; set; }
        public string Address { get; set; }
    }

コントローラ:

 [HttpPost]
        public ActionResult Index(Company company)
        {
            if(ModelState.IsValid)
            {
                //your code
            }

            // your custom validation message here
            if (ModelState["CompanyName"].Errors.Any())
                ModelState["CompanyName"].Errors[0] = new ModelError("custom error message");

            return View();
        }
于 2012-11-09T06:55:15.460 に答える
1

検証をエンティティ モデルに結合しました。これを回避する方法は、エンティティからビュー モデルを作成し、それらに検証を適用することです。

例: エンティティがある場合...

public class Product
{
    public string Name {get; set;}
}

2 つの異なるビュー モデルを作成できます。

public class ProductPageViewModel1
{
    [Required]
    public string Name {get; set;}
}

public class ProductPageViewModel2
{
    [DisplayName("Foo")]
    public string Name {get; set;}

}

エンティティをビュー モデルにマップし、これらをビューで使用します。

于 2012-11-08T17:18:50.980 に答える