0

我有一个支持多个 ASP.NET MVC Web 应用程序的实体框架 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;}
}

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

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 回答