MVC: Remplacer ValidationMessage par défaut
Dans le monde de la MVC, j'ai ce modèle de vue...
public class MyViewModel{
[Required]
public string FirstName{ get; set; } }
...et ce genre de chose à mon avis...
<%= Html.ValidationSummary("Please correct the errors and try again.") %>
<%= Html.TextBox("FirstName") %>
<%= Html.ValidationMessage("FirstName", "*") %>
Ma question: Si je soumettre ce formulaire sans fournir de nom, je reçois le message suivant "Le champ FirstName"
OK. Donc, je vais changer ma propriété...
[DisplayName("First Name")]
[Required]
public string FirstName{ get; set; }
..et maintenant "Le Premier Nom de champ est obligatoire"
Tout bon jusqu'ici.
Alors maintenant, je veux que le message d'erreur à afficher "prénom bla Bla". Comment puis-je remplacer le message par défaut pour afficher DisplayName + "bla Bla", ne bénéficiant pas d'annoter toutes les propriétés avec quelque chose comme
[Required(ErrorMessage = "First Name Blah Blah")]
Acclamations,
ETFairfax
source d'informationauteur ETFairfax
Vous devez vous connecter pour publier un commentaire.
Il semble que RequiredAttribute ne pas mettre en œuvre IClientValidatable, donc si vous remplacez la RequiredAttribute il se casse la validation côté client.
Donc, c'est ce que j'ai fait et ça fonctionne. Espérons que cela aide quelqu'un.
Ici est une façon de le faire sans sous-classement
RequiredAttribute
. Il suffit de faire quelques attribut de l'adaptateur de classes. Ici, je suis en utilisantErrorMessageResourceType
/ErrorMessageResourceName
(une ressource), mais vous pouvez facilement définirErrorMessage
ou même vérifier l'existence de remplacements avant l'établissement de ces.Mondiale.asax.cs:
Cet exemple, serait de créer un fichier de ressources de Ressources nommées.resx avec
ValRequired
que les nouvelles de message par défaut etValStringLength
que la longueur de la chaîne de dépassement de message par défaut. À noter que pour les deux,{0}
reçoit le nom du champ, vous pouvez définir avec[Display(Name = "Field Name")]
.Il suffit de changer
à
Edit: j'ai posté parce que j'étais à la recherche de cette solution avec l'attribut [Obligatoire] et eu de problème pour le trouver. La création de nouvelles de Q/r n'ont pas l'air bon, étant donné que cette question existe déjà.
J'essayais de résoudre la même chose et j'ai trouvé une solution très simple MVC 4.
Tout d'abord, vous aurait probablement pour stocker les messages d'erreur dans un certain lieu. J'ai utilisé des ressources personnalisées, bien décrite à http://afana.me/post/aspnet-mvc-internationalization.aspx.
L'Important c'est que je peux obtenir n'importe quelle ressource (même message d'erreur) en appelant simplement ResourcesProject.Les ressources.SomeCustomError ou ResourcesProject.Les ressources.MainPageTitle etc. Chaque fois que j'essaie d'accéder à des Ressources de la classe, il faut d'info culture de thread en cours et retourne à droite de la langue.
J'ai message d'erreur pour la validation de champ dans ResourcesProject.Les ressources.RequiredAttribute. Pour régler ce message s'affiche dans la Vue, il suffit de mettre à jour attribut [Obligatoire] avec ces deux paramètres.
ErrorMessageResourceType - Type qui sera appelé (dans notre exemple ResourcesProject.Ressources)
ErrorMessageResourceName - Propriété, qui sera appelée sur le type ci-dessus (Dans notre cas RequiredAttribute)
Voici une très simplifiée modèle de connexion, ce qui montre seulement identifiant de message de validation. Lorsque le champ est vide, il va prendre la chaîne de ResourcesProject.Les ressources.RequiredAttribute et d'afficher cela comme une erreur.
Vous pouvez écrire votre propre attribut:
C'est la copie de RequiredAttribute de Réflecteur avec changé message d'erreur.
App_GlobalResources/ValidationResource.resx
Maintenant utiliser les données d'annotation
Cela a fonctionné pour moi. Lire attentivement les commentaires dans le code. (Basé sur du Tchad réponse).