2012-03-25 3 views
9

Ich kann dies leicht mit einem TextBoxFor tun, aber wie mache ich es mit einem EditorFor?@ Html.EditorFor Wie Attribut Typ = "E-Mail"

Ich dachte mit der DataAnnotation [DataType(DataType.EmailAddress)], aber das tut es nicht.

Ich verstehe nicht ganz, was die DataType Annotation tatsächlich tut, weil es auf den ersten Blick überhaupt nichts zu tun scheint.

Antwort

6

Die Hilfsmethode EditorFor ist standardmäßig etwas eingeschränkt und scheint das HTML5-Attribut type="email" noch nicht zu unterstützen.

Ihre Optionen scheinen entweder zu verwenden oder eine benutzerdefinierte Vorlage zu erstellen, mit der Sie das Attribut type der Eingabe festlegen können. Hier finden Sie another thread, die einige der Optionen zum Erstellen eigener Vorlagen beschreibt.

Die DataAnnotation [DataType(DataType.EmailAddress)] ist eigentlich ziemlich nützlich. Es setzt die id und name Ihres Formularfelds auf email, die Sie mit jQuery-Validierung verwenden können, um die clientseitigen Validierungsnachrichten des Benutzers anzuzeigen. Das Anwenden der DataAnnotation auf Ihre Modellklasse bedeutet auch, dass die E-Mail-Eigenschaft in Ihrem Modell automatisch auf der Serverseite überprüft wird. Wenn Sie in Ihrer App eine unauffällige Validierung aktivieren, erhalten Sie nahezu kostenlos eine client- und serverseitige Validierung.

+0

Kann dies nicht passieren, auch mit TextBoxFor –

13

Sie können die HTML-Attribute außer Kraft setzen, an dem ein Browser type='text' Rückfall, wenn sie es nicht unterstützen:

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

6

es nun unterstützt zu sein scheint.

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

Als Ergänzung zu jortizromo ‚s Antwort, Sie haben jetzt mindestens zwei Möglichkeiten:

  1. @type im htmlAttributes Parameter für die Methode angeben EditorFor() wie in

    @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @type = "email" } }) 
    
  2. Verwenden des EmailAddress Annotationsattributs von System.ComponentModel.DataAnnotations Namespace in der Modellklassendefinition für die entsprechenden Email Eigenschaft und einen einfachen Aufruf der Methode EditorFor() (dies stellt HTML-Validierungsdaten-Tags, die eine gute oder schlechte Idee je nach Aufgabe sein könnten), wie in

    Ansichtsmodell

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

    Razor anzeigen

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