Frage

Ich möchte ein benutzerdefiniertes Validierungsattribut für MVC2 für eine E -Mail -Adresse erstellen, die nicht von RegularexpressionAttribute erbt, die jedoch bei der Kundenvalidierung verwendet werden kann. Kann mir jemand in die richtige Richtung verweisen?

Ich habe etwas so Einfaches ausprobiert:

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

Aber es scheint nicht für den Kunden zu funktionieren. Wenn ich jedoch Regularexpression (Validierung.EmailaddressRegex)] verwendet habe, scheint es gut zu funktionieren.

War es hilfreich?

Lösung

Sie müssen einen Adapter für das neue Attribut registrieren, um die Validierung der Client -Seite zu aktivieren.

Da der RegularexpressionAttribute bereits einen Adapter hat, der RegularexpressionAttributeadapter ist, müssen Sie es nur wiederverwenden.

Verwenden Sie einen statischen Konstruktor, um den erforderlichen Code in derselben Klasse zu halten.

[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)
    {
    }
}

Weitere Informationen finden Sie in diesem Beitrag zum Erläuterung des vollständigen Vorgangs.http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Andere Tipps

Die CustomValidationAttribute -Klasse MSDN -Seite Hat jetzt ein paar Beispiele. Der Posten von Phil Haacked ist veraltet.

Schauen Sie sich den universellen abhängigen Eigenschafts -Validator in an in Dies Artikel

Haben Sie versucht, Datenanmerkungen zu verwenden?

Dies ist mein Annotationsprojekt mit System.comPonentModel.Dataannotations;

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

Dies ist in meinem Modelsprojekt

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

Dies ist mein Controller

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

  return View(formViewModel);
}

Sie müssen DataAnnotationen Google benötigen, um das Projekt zu greifen und zu kompilieren. Ich würde es tun, aber ich muss hier lange mit dem Ende hierher kommen.

Hoffe das hilft.

BEARBEITEN

Fand dies als schnelles Google.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top