2013-11-01 13 views
9

Ich verwende Datenanmerkungen in meinem ASP.NET MVC4-Projekt, um clientseitige Validierung für E-Mail- und Telefonfelder durchzuführen. E-Mail ist erfolgreich in der Client-Validierung, aber Telefon nicht - es erlaubt mir ungültige Zeichen einzugeben und nur warnt mich auf Vorlage der Form (und nicht unmittelbar nach dem Zeichen eingegeben wird)E-Mail-Annotationsvalidierung funktioniert, aber Telefon nicht

Im Modell:

[Required(ErrorMessage = "Email is required")] 
[DataType(DataType.EmailAddress)] 
[EmailAddress] 
[Display(Name = "Email")] 
public string Email{ get; set; } 

[Required(ErrorMessage = "Mobile is required")] 
[DataType(DataType.PhoneNumber)] 
[Phone] 
[Display(Name = "Mobile number")] 
public string Mobile { get; set; } 

nach Ansicht ich glaube, ich bin die richtigen Skriptverweise einschließlich:

<script type="text/javascript" src="~/Scripts/jquery.validate.min.js" ></script 
<script type="text/javascript" src="~/Scripts/jquery.validate.unobtrusive.min.js" ></script> 

..und mit hTML Helfern (ich verwende TextBoxFor anstatt EditorFor als ich Klassenattribut anwenden werde, die ich habe hier zur besseren Übersicht weggelassen)

@Html.LabelFor(model => model.Email) 
@Html.ValidationMessageFor(model => model.Email) 
@Html.TextBoxFor(model => model.Email, new { @type = "email" })  

@Html.LabelFor(model => model.Mobile) 
@Html.ValidationMessageFor(model => model.Mobile) 
@Html.TextBoxFor(model => model.Mobile, new { @type = "phone" }) 

Was fehlt mir?

Antwort

0

Ich denke, das Problem ist, dass der Telefontyp nur nicht unterstützt wird. Siehe phone type support at w3schools

+0

Vielleicht wäre es besser, das OP zu fragen (mit einem Kommentar), welcher Telefontyp verwendet wird; es könnte ein unterstützter Typ sein, in diesem Fall ist dies nicht die Antwort ... – einpoklum

+0

@OzAnt - sagst du das anstelle von type = "phone" sollte ich neuen type = "tel" ?? –

+0

@LiamWeston - Nicht genau: w3schools sagt HTML5 definiert einen Telefon-Eingangstyp mit type = tel, nicht Telefon, aber dieser Typ wird von keinem Browser unterstützt (wie ich denke, Telefonnummern sind in jedem Land anders). Daher sollten Sie Ihre Telefonnummer mit Ihrem eigenen Regex in Ihrem Modell überprüfen und auf die Client-Seite anwenden. Sieht so aus, als wäre es eher ein Hinweis, da das iPhone type = "tel" erkennt und die Tastatur komplett auf die Standard-Telefontastatur umstellt. Siehe [link] http://html5doctor.com/html5-forms-input-types/#input -tel – OzAnt

6
[Required(ErrorMessage = "Mobile is required")] 
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Entered mobile format is not valid.")] 
public string Mobile{get; set;} 

Es Zahlen entsprechen wie:, 012-345-6789, (012) -345-6789 usw.

2

MVC 4 hat einen eingebauten für Emailaddress Anzeigevorlage aber nicht Telefonnummer. Sie müssen ein benutzerdefiniertes DisplayTemplate für [DataType(DataType.PhoneNumber)] erstellen.

Fügen Sie die folgende Datei (Sie werden wahrscheinlich die Unterordner DisplayTemplates erstellen):
Views\Shared\DisplayTemplates\PhoneNumber.cshtml

@model System.String 
@if (Model != null) 
{ 
    @:@System.Text.RegularExpressions.Regex.Replace(@Model, "(\\d{3})(\\d{3})(\\d{4})", "$1-$2-$3") 
} 
0

Verwendung EditorFor insted TextBoxFor für E-Mail, dann werden Fehler ok keyup in E-Mail-Feld gibt.

+0

@ Html.LabelFor (Modell => model.Email) @ Html.ValidationMessageFor (Modell => model.Email) @ Html.EditorFor (Modell => model.Email) Verwendung für diese E-Mail-Validierungen –

Verwandte Themen