it-swarm.com.de

Überprüfung der E-Mail-Adresse mithilfe von ASP.NET MVC-Datentypattributen

Ich habe einige Probleme mit der Validierung einer E-Mail.

In meinem Modell:

[Required(ErrorMessage = "Field can't be empty")]
[DataType(DataType.EmailAddress, ErrorMessage = "E-mail is not valid")]
public string ReceiverMail { get; set; }

Meiner Ansicht nach:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@Html.TextBoxFor(m => m.ReceiverMail, new { @placeholder="E-mail"}) <br />
@Html.ValidationMessageFor(m => m.ReceiverMail)

Jetzt wird mir korrekt "Feld darf nicht leer sein" angezeigt, wenn Sie das Feld leer lassen. Wenn Sie jedoch eine ungültige E-Mail-Adresse wie "fwenrjfw" eingeben, wird im Formular nicht "E-Mail ist ungültig" angezeigt.

Wie kann ich das Formular zur Bestätigung der Eingabe als E-Mail-Adresse erhalten? Ich bin auf der Suche nach Hilfe.

150
Java Afca

Wenn Sie .NET Framework 4.5 verwenden, besteht die Lösung darin, EmailAddressAttribute zu verwenden, das sich in System.ComponentModel.DataAnnotations Befindet.

Ihr Code sollte ungefähr so ​​aussehen:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }

Versuchen Html.EditorFor Hilfsmethode anstelle von Html.TextBoxFor.

38
hazimdikenli

Sie müssen das RegularExpression-Attribut wie folgt verwenden:

[RegularExpression("^[a-zA-Z0-9_\\.-][email protected]([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "E-mail is not valid")]

Löschen Sie nicht [Erforderlich], da [RegularExpression] keine Auswirkungen auf leere Felder hat.

19
Alexander Imra

wenn Sie .net 4.5 noch nicht verwenden:

/// <summary>
/// TODO: AFTER WE UPGRADE TO .NET 4.5 THIS WILL NO LONGER BE NECESSARY.
/// </summary>
public class EmailAnnotation : RegularExpressionAttribute
{
    static EmailAnnotation()
    {
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAnnotation), typeof(RegularExpressionAttributeAdapter));
    }

    /// <summary>
    /// from: http://stackoverflow.com/a/6893571/984463
    /// </summary>
    public EmailAnnotation()
        : base(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
            + "@"
            + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$") { }

    public override string FormatErrorMessage(string name)
    {
        return "E-mail is not valid";
    }
}

Dann können Sie dies tun:

    public class ContactEmailAddressDto
    {
        public int ContactId { get; set; }
        [Required]
        [Display(Name = "New Email Address")]
        [EmailAnnotation] //**<----- Nifty.**
        public string EmailAddressToAdd { get; set; }
    }
14
mcfea

Ich verwende MVC 3. Ein Beispiel für die Eigenschaft einer E-Mail-Adresse in einer meiner Klassen ist:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[Email(ErrorMessage = "The email address is not valid")]
public string Email { get; set; }

Entfernen Sie das Required, wenn die Eingabe optional ist. Ich brauche keine regulären Ausdrücke, obwohl ich einen habe, der alle Optionen innerhalb einer E-Mail-Adresse bis zur Stufe RFC 2822 abdeckt (sehr lang).

10
Peter Smith
[Required(ErrorMessage = "Please enter Social Email id")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
4

Skripte werden normalerweise am Ende der HTML-Seite geladen, und MVC empfiehlt die Verwendung von Bundles, um nur zu sagen. Meine beste Wette ist also, dass Ihre jquery.validate - Dateien auf irgendeine Weise geändert wurden oder nicht auf die neueste Version aktualisiert wurden, da sie E-Mail-Eingaben validieren.

Sie können also entweder Ihr Nuget-Paket aktualisieren/aktualisieren oder Ihre eigene Funktion schreiben.

Hier ist ein Beispiel, das Sie in eine zusätzliche Datei nach jquery.validate.unobtrusive Einfügen würden:

$.validator.addMethod(
    "email",
    function (value, element) {
        return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
    },
    "This e-mail is not valid"
);

Dies ist nur ein Kopieren und Einfügen des aktuellen jquery.validate - Regex. Auf diese Weise können Sie jedoch Ihre benutzerdefinierte Fehlermeldung festlegen und zusätzliche Methoden zu Feldern hinzufügen, die Sie möglicherweise in naher Zukunft überprüfen möchten.

0
Tiramonium

Verwendete den obigen Code im MVC5-Projekt und es funktioniert einwandfrei mit dem Validierungsfehler. Probieren Sie einfach diesen Code aus

   [Required]
   [Display(Name = "Email")]
   [EmailAddress]

   [RegularExpression(@"^([A-Za-z0-9][^'!&\\#*$%^?<>()+=:;`~\[\]{}|/,₹€@ ][a-zA-z0- 
    9-._][^!&\\#*$%^?<>()+=:;`~\[\]{}|/,₹€@ ]*\@[a-zA-Z0-9][^!&@\\#*$%^?<> 
        ()+=':;~`.\[\]{}|/,₹€ ]*\.[a-zA-Z]{2,6})$", ErrorMessage = "Please enter a 
   valid Email")]


   public string ReceiverMail { get; set; }
0
Kalyani Rathore