代码之家  ›  专栏  ›  技术社区  ›  Spock

ASP.NET MVC 2.0验证和错误消息

  •  1
  • Spock  · 技术社区  · 16 年前

    我需要在MVC2.0中设置DataAnnotation的validation属性的ErrorMessage属性。例如,我应该能够传递一个ID而不是模型属性的实际错误消息,例如。。。

    [StringLength(2, ErrorMessage = "EmailContentID")] 
    [DataType(DataType.EmailAddress)]         
    public string Email { get; set; } 
    

    然后使用此ID(“EmailContentID”)从另一个服务(如数据库)检索某些内容(错误消息)。然后向用户显示错误消息,而不是ID。为此,我需要设置DataAnnotation validation attributes ErrorMessage属性。

    不管现在有多复杂。。。。

    BSystem.ComponentModel.DataAnnotationErrorMessage属性(get和set)已在MVC DataAnnotationsModelValidator中设置,因此无法再次设置。如果我尝试设置它,我会得到属性不能设置多次的错误消息。

     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 ; 
                 } 
    
                //...... 
           } 
      } 
    

    有谁能告诉我这件事的正确方向吗?

    提前谢谢。

    1 回复  |  直到 16 年前
        1
  •  0
  •   John Hartsock    16 年前

    我个人不会创建一个继承原始提供者的新提供者,但我会创建一个继承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
    )]