51 votes

ErrorMessageString ou ErrorMessageResourceName doivent être définis, mais pas les deux en utilisant CreditCardAttribute.

C'est mon modèle:

namespace MvcApplication2.Models
{
    public class CreditCard
    {
        [CreditCard(ErrorMessageResourceType = typeof(Messages), ErrorMessageResourceName = "CardNumberInvalid")]
        public string CardNumber { get; set; }
    }
}

C'est mes Messages.resx:

Nom De La Valeur

CardNumberInvalid Vérifier votre numéro de carte est correcte

Et c'est mon point de vue:

@model MvcApplication2.Models.CreditCard
@Html.TextBoxFor(m => m.CardNumber);

Dans MVC version 3, cela fonctionne sans erreur. Dans MVC 4 quand je vais sur cette page, j'obtiens une excpetion en disant: "Soit ErrorMessageString ou ErrorMessageResourceName doit être réglé, mais pas les deux". Ce n'est qu'qui se passe avec le CreditCardAttribute. D'autres attributs de validation tels que RequiredAttribute beau travail. J'ai seulement mis la ErrorMessageResourceName. Je n'ai pas mis le ErrorMessageString, afin de ne pas comprendre ce que j'ai fait de mal. Quelqu'un peut-il aider s'il vous plaît?

153voto

Dipen Bhikadya Points 738

C’est un problème connu dans .Net 4.5. L'ajout du paramètre nommé "ErrorMessage = null" devrait résoudre ce problème.

Référence: http://connect.microsoft.com/VisualStudio/feedback/details/757298/emailaddress-attribute-is-unable-to-load-errormessage-from-resource-mvc

15voto

Ahm3d Said Points 308
 [CreditCard(ErrorMessageResourceType = typeof(Messages), ErrorMessageResourceName = "CardNumberInvalid"), , ErrorMessage = null]
 

va résoudre votre problème

10voto

Ian Newson Points 2163

J'ai eu ce problème parce que j'avais implémenté un RequiredAttributeAdapter , qui définissait automatiquement la propriété ErrorMessageResourceName .

Vous pouvez résoudre ce problème en vérifiant si la propriété ErrorMessage a été définie avant de définir les paramètres ErrorMessageResourceName :

 /// <summary>
/// Creates a new instance of the RequiredAttributeAdapter, used for switching the default required message
/// format
/// </summary>
public CustomMessageRequiredAttributeAdapter(
    ModelMetadata metadata,
    ControllerContext context,
    RequiredAttribute attribute
)
    : base(metadata, context, attribute)
{
    if (string.IsNullOrEmpty(attribute.ErrorMessage))
    {
        attribute.ErrorMessageResourceType = typeof (ValidationMessages);
        attribute.ErrorMessageResourceName = "PropertyValueRequired";
    }
}
 

-1voto

Flea Points 3308

J'ai eu le même problème sur une propriété que je localisais. J'avais défini le ErrorMessageResourceType puis le ErrorMessageResourceName mais par erreur, mis l'attribut ErrorMessage sur ainsi qui a jeté l'exception

 [NotEqualTo("User_Name", ErrorMessageResourceType = typeof(LROResources.Global), ErrorMessageResourceName = "UserPasswordCannotBeUsername", ErrorMessage = "The password cannot be the same as your Username.")]
 

Donc, dans mon cas, en supprimant simplement ErrorMessage j'ai résolu le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X