我有一个支持多个 ASP.NET MVC Web 应用程序的实体框架 4.1 模型。我使用 DataAnnotations 来定义和本地化标签文本和验证规则以及错误消息。
对于某些应用程序,我需要某些字段的标签文本不同于标准的模型定义文本。对于标签本身来说,这很容易实现:我从与视图关联的本地资源文件中检索我需要的文本。但是,标签文本也用于验证错误消息,例如“{fieldname} 的最大长度必须为 50 个字符”。
在不更改模型类上的注释的情况下更改验证消息的最佳方法是什么?
我有一个支持多个 ASP.NET MVC Web 应用程序的实体框架 4.1 模型。我使用 DataAnnotations 来定义和本地化标签文本和验证规则以及错误消息。
对于某些应用程序,我需要某些字段的标签文本不同于标准的模型定义文本。对于标签本身来说,这很容易实现:我从与视图关联的本地资源文件中检索我需要的文本。但是,标签文本也用于验证错误消息,例如“{fieldname} 的最大长度必须为 50 个字符”。
在不更改模型类上的注释的情况下更改验证消息的最佳方法是什么?
尝试针对特定情况重新定义控制器中的错误消息,如下所示:
模型:
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();
}
您已将验证与实体模型相结合。避免这种情况的方法是从您的实体创建视图模型并对其进行验证。
示例:如果您有实体...
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;}
}
将实体映射到视图模型并在您的视图中使用它们。