7
votes

Comment remplacer les messages d'erreur de basenotation standard

J'utilise System.componontModel.DataNotations pour valider mes objets de modèle. Comment puis-je remplacer les messages Attributs standard (requis et StringLength) sans fournir un attribut errorressage à chacun d'eux ou sous les classeurs?


0 commentaires

3 Réponses :


6
votes

Vous pouvez utiliser ERRORMESSAGESSAGE FORT> Propriété de la classe de base validationAttribute strong> pour tous les validateurs de basenotation.

Par exemple: P>

[Range(0, 100, ErrorMessage = "Value for {0} must be between {1} and {2}")]
public int id;


2 commentaires

Vrai. Mais existe-t-il un moyen de remplacer le message par défaut à la fois?


@Fitzchakyitzchaki Avez-vous déjà atteint cela?



8
votes

Écrire un nouveau post car j'ai besoin de plus de formatage que les commentaires fournis.

regarder validationAttribute strong> - classe de base d'attributs de validation. p>

Si une erreur de validation est produite, le message d'erreur sera être créé par la méthode: p> xxx pré>

Suivant regardez sur ERRORMESAGESSESSESSESSESSESSESSESSESSESSESSESSESSEX PRIX> P>

internal static string RangeAttribute_ValidationError
{
    get
    {
        return ResourceManager.GetString("RangeAttribute_ValidationError", resourceCulture);
    }
}


2 commentaires

Merci beaucoup de veton. La dernière partie que vous avez mentionnée, j'ai totalement manqué.


Je ne comprends pas comment les fichiers de ressources devraient-ils être nommés (et où placés) pour remplacer ResourceManager de Dataannotations.dll.



0
votes

pour Validation ASP.NET CORE FORT>, reportez-vous à Cette page , où il explique comment le configurer à l'aide du moteur de service:

void InitializeDataAnnotationsCulture()
{
  var sr = 
    typeof(ValidationAttribute)
      .Assembly
      .DefinedTypes
      //ensure class name according to current .NET you're using
      .Single(t => t.FullName == "System.SR");

  var resourceManager = 
    sr
      .DeclaredFields
      //ensure field name
      .Single(f => f.IsStatic && f.Name == "s_resourceManager");

  resourceManager
    .SetValue(null, 
      DataAnnotationsResources.ResourceManager, /* The generated RESX class in my proj */
      BindingFlags.NonPublic | BindingFlags.Static, null, null);

  var injected = resourceManager.GetValue(null) == DataAnnotationsResources.ResourceManager;
  Debug.Assert(injected);
}


0 commentaires