![](/img/trans.png)
[英]How to reset the formatted ErrorMessages of the validation attributes in ASP.NET MVC?
[英]ASP.NET MVC 2.0 Validation and ErrorMessages
我需要在MVC 2.0中设置DataAnnotation的validate属性的ErrorMessage属性。 例如,我应该能够传递ID而不是Model属性的实际错误消息,例如...
[StringLength(2, ErrorMessage = "EmailContentID")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
然后使用此ID(“ EmailContentID”)从另一个服务(例如数据库)中检索某些内容(错误消息)。 然后,错误错误消息将显示给用户,而不是ID。 为此,我需要设置DataAnnotation验证属性的ErrorMessage属性。
通过重写DataAnnotationsModelValidatorProvider的受保护重写IEnumerable GetValidators(ModelMetadata元数据,ControllerContext上下文,IEnumerable属性),这似乎是一项艰巨的任务。
但是现在很复杂...
答:MVC DatannotationsModelValidator的ErrorMessage属性是只读的。 所以我不能在这里设置任何内容B. System.ComponentModel.DataAnnotationErrorMessage属性(获取并设置)已在MVC DatannotationsModelValidator中设置,因此无法再次设置。 如果尝试设置它,则会出现“该属性不能设置多次...”错误消息。
public class CustomDataAnnotationProvider : DataAnnotationsModelValidatorProvider
{
protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
{
IEnumerable<ModelValidator> validators = base.GetValidators(metadata, context, attributes);
foreach (ValidationAttribute validator in validators.OfType<ValidationAttribute>())
{
messageId = validator.ErrorMessage;
validator.ErrorMessage = "Error string from DB And" + messageId ;
}
//......
}
}
谁能给我正确的方向吗?
提前致谢。
我个人不会创建一个继承原始提供程序的新提供程序,但会创建一个继承ValidationAttribute或StringLengthAttribute的新属性。
像这样
public class MyNewValidationAttribute : StringLengthAttribute
{
public int ErrorMessageId
{
set {
var myErrorMessageFromDB = ""; //query database and get message.
this.ErrorMessage = myErrorMessageFromDB;
}
}
}
现在,当您分配属性时
[StringLength(2, ErrorMessageId = 1 //equals id from database
)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.