How to change 'data-val-number' message validation in MVC while it is generated by @Html helper

后端 未结 14 1728
面向向阳花
面向向阳花 2020-11-28 03:44

Assume this model:

Public Class Detail
    ...
    
    
         


        
14条回答
  •  星月不相逢
    2020-11-28 04:21

    From this book on MVC 3 that I have. All you have to do is this:

    public class ClientNumberValidatorProvider : ClientDataTypeModelValidatorProvider 
    { 
       public override IEnumerable GetValidators(ModelMetadata metadata, 
                                                              ControllerContext context) 
       { 
           bool isNumericField = base.GetValidators(metadata, context).Any(); 
           if (isNumericField) 
               yield return new ClientSideNumberValidator(metadata, context); 
       } 
    } 
    
    public class ClientSideNumberValidator : ModelValidator 
    { 
      public ClientSideNumberValidator(ModelMetadata metadata,  
          ControllerContext controllerContext) : base(metadata, controllerContext) { } 
    
      public override IEnumerable Validate(object container) 
      { 
         yield break; // Do nothing for server-side validation 
      } 
    
      public override IEnumerable GetClientValidationRules() 
      { 
         yield return new ModelClientValidationRule { 
            ValidationType = "number", 
            ErrorMessage = string.Format(CultureInfo.CurrentCulture,  
                                         ValidationMessages.MustBeNumber,  
                                         Metadata.GetDisplayName()) 
            }; 
      } 
    } 
    
    protected void Application_Start() 
    { 
        // Leave the rest of this method unchanged 
    
        var existingProvider = ModelValidatorProviders.Providers 
            .Single(x => x is ClientDataTypeModelValidatorProvider); 
        ModelValidatorProviders.Providers.Remove(existingProvider); 
        ModelValidatorProviders.Providers.Add(new ClientNumberValidatorProvider()); 
    } 
    

    Notice how the ErrorMessage is yielded, you specify the current culture and the localized message is extracted from the ValidationMessages(here be culture specifics).resx resource file. If you don't need that, just replace it with your own message.

提交回复
热议问题