2013-11-01 9 views
9

Sto utilizzando le annotazioni di dati nel mio progetto ASP.NET MVC4 per eseguire la convalida sul lato client nei campi di posta elettronica e telefono. La posta elettronica è convalidare con successo nel client, ma telefono non - mi permette di inserire i caratteri non validi e mi avverte soltanto dietro presentazione di modulo (piuttosto che immediatamente dopo il carattere digitato)La convalida dell'annotazione dei dati e-mail funziona ma Telefono non è

Nel modello:

[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; } 

Dal punto di vista credo di essere inclusi i corretti riferimenti a script:

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

..e utilizzando aiutanti html (sto usando TextBoxFor piuttosto che EditorFor come sto applicando attributi di classe che ho omesso qui per chiarezza)

@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" }) 

Cosa mi manca?

risposta

0

Penso che il problema sia che il tipo di telefono non è supportato. Vedere phone type support at w3schools

+0

Forse sarebbe meglio chiedere all'OP (utilizzando un commento) quale tipo di telefono viene utilizzato; potrebbe essere un tipo supportato, nel qual caso questa non è la risposta ... – einpoklum

+0

@OzAnt - stai dicendo che invece di type = "phone" dovrei usare new type = "tel" ?? –

+0

@LiamWeston - Non esattamente: w3schools dice che HTML5 definisce un tipo di ingresso telefonico con tipo = tel, non telefono, MA questo tipo non è supportato da nessun browser (come suppongo che i numeri di telefono siano diversi in ogni paese). Quindi potrebbe essere meglio convalidare il tuo numero di telefono con la tua regex nel tuo modello e applicarlo al lato client. Sembra che sia più un suggerimento dato che l'iPhone riconosce type = "tel" e cambia completamente la tastiera sulla tastiera del telefono standard vedi [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;} 

Si abbinerà numeri come:, 012-345-6789, (012) -345-6789 ecc

2

MVC 4 ha un built-in maschera di visualizzazione per EmailAddress ma non Numero di telefono. È necessario creare un DisplayTemplate personalizzato per [DataType(DataType.PhoneNumber)].

Aggiungere il seguente file (si dovrà probabilmente per creare le DisplayTemplates sottocartella):
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

uso EditorFor invece di TextBoxFor per e-mail, allora sarà dà errore ok keyup nel campo e-mail.

+0

@ Html.LabelFor (modello => model.Email) @ Html.ValidationMessageFor (modello => model.Email) @ Html.EditorFor (modello => model.Email) usare questo per Validazioni Email –

Problemi correlati