我有一个支持多个ASP.NET MVC Web应用程序的Entity Framework 4.1模型。我使用DataAnnotations来定义和本地化标签文本和验证规则以及错误消息。
对于某些应用程序,我需要某些字段的标签文本与标准的模型定义文本不同。这很容易实现标签本身:我从与视图关联的本地资源文件中检索我需要的文本。但是,标签文本也用于验证错误消息,例如“{fieldname}的最大长度必须为50个字符”。
在不更改模型类的注释的情况下更改验证消息的最佳方法是什么?
答案 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();
}