Question

Je voudrais créer un attribut de validation personnalisé pour MVC2 une adresse e-mail qui ne possèdes pas de RegularExpressionAttribute mais qui peut être utilisé dans la validation du client. Quelqu'un peut-il me diriger dans la bonne direction?

J'ai essayé quelque chose d'aussi simple que cela:

[AttributeUsage( AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false )]
public class EmailAddressAttribute : RegularExpressionAttribute
{
    public EmailAddressAttribute( )
        : base( Validation.EmailAddressRegex ) { }
}

mais il ne semble pas fonctionner pour le client. Cependant, si j'utilise RegularExpression (Validation.EmailAddressRegex)] il semble fonctionner très bien.

Était-ce utile?

La solution

Vous devez vous enregistrer un adaptateur pour le nouvel attribut afin de permettre la validation du côté client.

Depuis l'RegularExpressionAttribute a déjà un adaptateur, qui est RegularExpressionAttributeAdapter, tout ce que vous devez faire est de le réutiliser.

Utilisez un constructeur statique pour garder tout le code nécessaire dans la même classe.

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple  = false)]
public class EmailAddressAttribute : RegularExpressionAttribute
{
    private const string pattern = @"^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$";

    static EmailAddressAttribute()
    {
        // necessary to enable client side validation
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAddressAttribute), typeof(RegularExpressionAttributeAdapter));
    }

    public EmailAddressAttribute() : base(pattern)
    {
    }
}

Pour plus d'information Commander ce post expliquant le processus complet. http://haacked.com/archive/2009/11/19/aspnetmvc2-custom- validation.aspx

Autres conseils

Le CustomValidationAttribute la page MSDN classe a quelques exemples sur maintenant. Le poste Phil Haacked est obsolète.

Regardez le validateur Propriété à charge universelle cet article

Avez-vous essayé d'utiliser les annotations de données?

Ceci est mon projet Annotations     en utilisant System.ComponentModel.DataAnnotations;

public class IsEmailAddressAttribute : ValidationAttribute
{
  public override bool IsValid(object value)
  {
    //do some checking on 'value' here
    return true;
  }
}

Ceci est dans mon projet Modèles

namespace Models
{
    public class ContactFormViewModel : ValidationAttributes
    {
        [Required(ErrorMessage = "Please provide a short message")]
        public string Message { get; set; }
    }
}

Ceci est mon contrôleur

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ContactUs(ContactFormViewModel formViewModel)
{
  if (ModelState.IsValid)
  {
    RedirectToAction("ContactSuccess");
  }

  return View(formViewModel);
}

Vous devez google DataAnnotations que vous avez besoin de saisir le projet et le compiler. Je le ferais, mais je dois me sortir d'ici pour une longue w / fin.

Hope this helps.

EDIT

à cet comme rapide Google.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top