Domanda

Vorrei creare un attributo di convalida personalizzato per MVC2 per un indirizzo e -mail che non eredita da RegulaRexpressionAttribute ma che può essere utilizzato nella convalida del client. Qualcuno può indicarmi nella giusta direzione?

Ho provato qualcosa di così semplice come questo:

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

Ma non sembra funzionare per il cliente. Tuttavia, se uso RegulaRexpression (validation.emailaddressRegex)] sembra funzionare bene.

È stato utile?

Soluzione

È necessario registrare un adattatore per il nuovo attributo per abilitare la convalida sul lato client.

Poiché la regolarexpressionAttribute ha già un adattatore, che è regolarexpressionAttributeApter, tutto ciò che devi fare è riutilizzarlo.

Utilizzare un costruttore statico per mantenere tutto il codice necessario all'interno della stessa 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)
    {
    }
}

Per ulteriori informazioni sul checkout questo post che spiega il processo completo.http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Altri suggerimenti

La pagina MSDN CustomValidationAttribute Class Adesso ha alcuni esempi. Il Phil Haacked Post è obsoleto.

Guarda il validatore della proprietà universale dipendente in questo articolo

Hai provato a utilizzare le annotazioni dei dati?

Questo è il mio progetto di annotazioni utilizzando System.componentModel.DataAnnotations;

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

Questo è nel mio progetto di modelli

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

Questo è il mio controller

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

  return View(formViewModel);
}

Dovrai le dataNnotazioni di Google in quanto è necessario prendere il progetto e compilarlo. Lo farei ma devo uscire da qui per un lungo w/fine.

Spero che sia di aiuto.

MODIFICARE

Ho trovato questo come un rapido Google.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top