如何覆盖实体框架验证错误消息

时间:2012-11-08 17:13:31

标签: asp.net-mvc entity-framework-4 viewmodel modelmetadata data-annotations

我有一个支持多个ASP.NET MVC Web应用程序的Entity Framework 4.1模型。我使用DataAnnotations来定义和本地化标签文本和验证规则以及错误消息。

对于某些应用程序,我需要某些字段的标签文本与标准的模型定义文本不同。这很容易实现标签本身:我从与视图关联的本地资源文件中检索我需要的文本。但是,标签文本也用于验证错误消息,例如“{fieldname}的最大长度必须为50个字符”。

在不更改模型类的注释的情况下更改验证消息的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您已将验证与实体模型相结合。避免这种情况的方法是从您的实体创建视图模型并将验证放到那些。

示例:如果您有实体...

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

您可以创建两种不同的视图模型:

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

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

}

将实体映射到视图模型,并在视图中使用它们。

答案 1 :(得分:1)

尝试在控制器中重新定义特定情况下的错误消息,如下所示:

型号:

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();
        }