2012-03-25 11 views
9

Posso farlo facilmente utilizzando un TextBoxFor ma come faccio a farlo con un EditorFor?@ Html.EditorFor Come creare attributo type = "email"

Ho pensato di utilizzare il DataAnnotation [DataType(DataType.EmailAddress)] ma questo non lo fa.

Non capisco cosa faccia effettivamente l'annotazione DataType perché a prima vista non sembra fare nulla.

risposta

6

Il metodo di supporto EditorFor è alquanto limitato e non sembra ancora supportare l'attributo HTML5 type="email".

Ora le tue opzioni sembrano utilizzare TextBoxFor o creare un modello personalizzato che ti consenta di impostare l'attributo type dell'input. Ecco lo another thread che rivede alcune delle opzioni per la creazione di modelli personalizzati.

Il DataAnnotation [DataType(DataType.EmailAddress)] è in realtà abbastanza utile. Imposta id e name del campo modulo su email, che è possibile utilizzare con convalida jQuery per mostrare i messaggi di convalida lato client dell'utente. L'applicazione di DataAnnotation alla classe del modello significa anche che la proprietà di posta elettronica sul modello verrà automaticamente convalidata sul lato server. Se abiliti la convalida non invadente nella tua app, ottieni la convalida lato client e server quasi gratis.

+0

non può rendere questo accada anche con TextBoxFor –

13

È possibile ignorare gli attributi HTML, a cui un browser fallback per type='text' se non lo supportano:

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

6

sembra essere supportato ora.

@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control", @type = "email" } }) 
3

In aggiunta alle s' jortizromo risposta, ora avete almeno due opzioni:

  1. Specifica @type nel parametro htmlAttributes per il metodo EditorFor() come in

    @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @type = "email" } }) 
    
  2. Utilizzo dell'attributo annotazione EmailAddress da System.ComponentModel.DataAnnotations namespace nella definizione della classe del modello per il corrispondente Email proprietà e una semplice chiamata al metodo EditorFor() (questo fornisce tag di dati di convalida HTML che potrebbe essere una buona o cattiva idea a seconda del compito) come in

    ViewModel

    [EmailAddress] 
    public string Email { get; set; } 
    

    Razor View

    @Html.EditorFor(model => model.Email) 
    
Problemi correlati