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; }
Aus meiner Sicht:
<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 kann nicht leer sein" angezeigt, wenn Sie das Feld leer lassen. Wenn Sie jedoch eine ungültige E-Mail-Adresse wie "fwenrjfw" eingeben, wird auf dem Formular nicht "E-Mail ist ungültig" angezeigt.
Wie kann ich das Formular erhalten, um die Eingabe als E-Mail-Adresse zu bestätigen? Ich suche Hilfe dabei.
c#
asp.net-mvc
validation
email-validation
Java Afca
quelle
quelle
[DataType(DataType.EmailAddress, ErrorMessage = "Error message.")]
DataType.EmailAddress
geht es nicht um Validierung. Es geht um Datenpräsentation ...name@xxx
ist eine vollständig gültige E-Mail-Adresse, daher ist an dieser Methode nichts auszusetzen. Betrachten Sie zum Beispiel dasusername@localhost
Beispiel.Versuchen Sie
Html.EditorFor
stattdessen die HilfsmethodeHtml.TextBoxFor
.quelle
Sie müssen das RegularExpression-Attribut verwenden, ungefähr so:
Und löschen Sie nicht [Erforderlich], da [RegularExpression] keine Auswirkungen auf leere Felder hat.
quelle
Wenn Sie .net 4.5 noch nicht verwenden:
Dann können Sie dies tun:
quelle
Ich verwende MVC 3. Ein Beispiel für die Eigenschaft einer E-Mail-Adresse in einer meiner Klassen ist:
Entfernen Sie das,
Required
wenn die Eingabe optional ist. Keine Notwendigkeit für reguläre Ausdrücke, obwohl ich einen habe, der alle Optionen innerhalb einer E-Mail-Adresse bis zur RFC 2822-Ebene abdeckt (es ist sehr lang).quelle
[EmailAddress]
und Sie müssen habenusing System.ComponentModel.DataAnnotations;
Email
oderRegularExpression
macht das Feld erforderlich. Das Entfernen derRequired
Anmerkung hat keine Auswirkung. Irgendwelche Vorschläge, was zu tun ist, damit Felder mitRegularExpression
Validierung leere Felder akzeptieren?quelle
quelle
Skripte werden normalerweise am Ende der HTML-Seite geladen, und MVC empfiehlt die Verwendung von Bundles. 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 nachher in eine zusätzliche Datei einfügen würden
jquery.validate.unobtrusive
:Dies ist nur ein Kopieren und Einfügen des aktuellen
jquery.validate
Regex. Auf diese Weise können Sie Ihre benutzerdefinierte Fehlermeldung festlegen / zusätzliche Methoden zu Feldern hinzufügen, die Sie möglicherweise in naher Zukunft überprüfen möchten.quelle
Auf diese Weise wird die serverseitige Überprüfung einer E-Mail-Adresse behoben:
Jedoch...
Wenn Sie die clientseitige JQuery-Validierung verwenden, sollten Sie wissen, dass die E-Mail die serverseitige (Modellvalidierung) anders als die clientseitige (JQuery-Validierung) validiert. In diesem Test @ -Beispiel (eine Domain-E-Mail-Adresse der obersten Ebene) würde die Serverseite fehlschlagen, aber auf der Clientseite einwandfrei validiert.
Um diese Ungleichheit zu beheben, können Sie die standardmäßige clientseitige E-Mail-Validierung wie folgt überschreiben:
quelle