Comment créer attribut personnalisé de validation pour MVC
-
24-09-2019 - |
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.
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