2017-03-07 3 views
2

Ich habe eine benutzerdefinierte Validierung schrieb dies für Guid Type Like:Kann nicht Custome Fehlermeldung in Custome Validator Zurück

public class ValidGuidAttribute : ValidationAttribute 
{ 

    public override bool IsValid(object value) 
    { 
     string msg = "please select a device"; 
     ErrorMessage = msg; 
     var input = Convert.ToString(value); 
     if (string.IsNullOrEmpty(input)) 
     { 

      return false; 
     } 

     Guid guid; 
     if(!Guid.TryParse(input,out guid)) 
     { 
      return false; 
     } 
     if (guid == Guid.Empty) 
     { 
      return false; 
     } 
     return true; 
    } 
} 

und wenn ich Element auf dem ich diese haben Browser überprüfen:

<span class="field-validation-valid" data-valmsg-for="DeviceGroupId" data-valmsg-replace="true"></span> 

und wenn ich nicht fülle dieses archivierte und post Form, ich habe diese Fehlermeldung Nachricht:

Der Wert 'Bitte wählen Sie ein Gerät' ist nicht gültig für Gerätegruppe.

Ich will nur diese:

Bitte wählen Sie ein Gerät

und In ViewModel ich habe:

 [DisplayName("device group"),ValidGuid(ErrorMessage = "please enter")] 
    public Guid DeviceGroupId { get; set; } 

Antwort

1

Es scheint, dass benutzerdefinierte Validierung irgendein Problem hat mit der Typ Guid, wenn ich den Typ in string ändere, funktioniert Ihre aktuelle Implementierung:

enter image description here

Es ist komisch, wird automatisch in dieser Validierung für die Gültigkeit der Guid Art durchgeführt werden, weil, wenn ich die attibute benutzerdefinierte Validierung entfernen und auf Gültigkeit überprüfen, ich die gleiche Fehlermeldung erhalten Sie erhalten:

enter image description here

1

dies ist Standardvalidierungsnachricht, die ich denke mvc vor ist die Validierung ValidGuid prüft und diese Nachricht zu überschreiben, können Sie versuchen,

public class ValidGuidAttribute : ValidationAttribute 
    { 
     public override bool IsValid(object value) 
     {   
      ErrorMessage = "please select a device"; 
      var input = Convert.ToString(value); 
      if (string.IsNullOrEmpty(input)) 
      { 

       return false; 
      } 

      Guid guid; 
      if (!Guid.TryParse(input, out guid)) 
      { 
       return false; 
      } 
      if (guid == Guid.Empty) 
      { 
       return false; 
      } 
      return true; 
     } 

     public class ValidGuid : DataAnnotationsModelValidator<ValidGuidAttribute> 
     { 
      public ValidGuid(ModelMetadata metadata, ControllerContext context, ValidGuidAttribute attribute) 
       : base(metadata, context, attribute) 
      { 
       if (!attribute.IsValid(context.HttpContext.Request.Form[metadata.PropertyName])) 
       { 

         var propertyName = metadata.PropertyName; 


       if (context.Controller.ViewData.ModelState[propertyName] != null) 
        { 
          context.Controller.ViewData.ModelState[propertyName].Errors.Clear(); 
          context.Controller.ViewData.ModelState[propertyName].Errors.Add(attribute.ErrorMessage); 
         } 

       } 
      } 
     } 
    } 

und fügen Sie folgende Zeile zu Global.asax.cs Datei

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ValidGuidAttribute), typeof(ValidGuidAttribute.ValidGuid)); 
Verwandte Themen