Warum die Validierung funktioniert nicht mit Html.TextBoxFor aber ist bei der Verwendung von Html."EditorFor"?

Ich versuche das MVC-Datentyp Attribute, und einfach, erstellt ein einfaches Szenario, wie die folgenden:

Den Ansicht:

@model MVC4.Models.Model

@{
    ViewBag.Title = "DataTypeAttribute";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

<h2>DataTypeAttribute</h2>


@using (Html.BeginForm("SubmitData", "Home"))
{
    <div>
        @Html.ValidationSummary()
    </div>

    @Html.EditorFor(m => m.Email)
    <br />
    <br />
    @Html.EditorFor(m => m.PostalCode)

    <br />
    <br />
    @Html.EditorFor(m => m.TextOnly)
    <br />
    <br />

    <button type="submit">Submit</button>
}

Den Modell:

public class Model
{
    [DataType(DataType.EmailAddress)]

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

    [DataType(DataType.PostalCode)]
    public string PostalCode { get; set; }


    public string TextOnly { get; set; }
}

"SubmitData" ist nur ein controller, der Sicht Retouren(..., Modell), wenn ModelState.IsValid false ist.

Obwohl Beiträge wie diese tun, einen guten job bei der Bewältigung der Unterschiede zwischen Html.TextBoxFor und Html."EditorFor" konnte ich nicht finden, eine Antwort auf die Frage, warum die Validierung für die Datentyp EmailAddress wird nicht die Arbeit, wenn Sie TextBoxFor. Ich fand die Leute erwähnen TextBoxFor nicht nehmen Metadaten berücksichtigen, während "EditorFor" tut.

Aber macht das Sinn ? So TextBoxFor nicht bieten Unterstützung für client Validierungen ?!

Frage ich mich, was ist der Grund für den Unterschied zwischen den beiden ?

  • Zusammenfassung der Antwort: die neuen input-Typen eingeführt, die mit HTML 5, wie z.B. <input type= "email" /> hinzufügen einer automatischen Validierung. TextBoxFor immer generieren Eingänge vom Typ 'text', und daher keine eingebaute Validierung generiert. Auf der anderen Seite, "EditorFor" übernimmt Modell Felder mit Metadaten (Daten Anmerkungen) berücksichtigt bei der Generierung der html-Code für Sie, so ein Feld mit der Aufschrift "DataType(DataType.EmailAddress)" generiert ein input type='email', und damit die neue built-in HTML 5 Validierung zusammen mit ihm.
InformationsquelleAutor Veverke | 2015-06-23
Schreibe einen Kommentar