Format von DateTime mit Datenanmerkungen zuweisen?

99

Ich habe dieses Attribut in meinem Ansichtsmodell:

[DataType(DataType.DateTime)]
public DateTime? StartDate { get; set; }

Wenn ich das Datum anzeigen oder ein Textfeld mit dem Datum füllen möchte, habe ich folgende Möglichkeiten:

<%: Model.StartDate %>

<%: Html.TextBoxFor(m => m.StartDate) %>

Wann immer das Datum angezeigt wird, wird es wie folgt angezeigt: 01.01.2011 00:00:00 Uhr

Ich möchte aber nur den 01.01.2011 anzeigen

Gibt es eine Möglichkeit, ein Anzeigeformat mit Datenanmerkungen anzuwenden? Ich möchte nicht zu jeder Instanz gehen müssen, in der ich ein Datum anzeige, und Code hinzufügen, um es zu formatieren.

Steven
quelle

Antworten:

149

Versuchen Sie es mit folgenden Tags zu versehen:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
David Fox
quelle
Ich habe es gerade versucht, es zeigt immer noch die Uhrzeit in der TextBox an und wenn sie nur auf der Seite angezeigt wird.
Steven
3
@Steven: Kannst du versuchen zu entfernen, [DataType(DataType.DateTime)]wenn du es noch nicht getan hast ?
David Fox
8
DisplayFormatfunktioniert nur mit EditorForund DisplayForhelfer.
Г И І І О
1
Tolle Antwort - mir fehlte der Parameter "ApplyFormatInEditMode".
CodeHxr
5
Ich konnte dies durch den Formatparameter in Html.TextBoxFor beheben. Durch Einstellen auf @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")konnte ich nur das Datum anzeigen lassen. Gefunden hier [ stackoverflow.com/a/14529347/2938775] .
Caffeinius
44

Hast du das versucht?

[DataType(DataType.Date)]
rk1962
quelle
2
Dadurch wird auch die Unterstützung der HTML5-Datumsauswahl aktiviert, sofern der Browser dies unterstützt.
AaronLS
24

In mvc 4 können Sie es leicht tun , wie folgt verwendet TextBoxFor..

@Html.TextBoxFor(m => m.StartDate, "{0:MM/dd/yyyy}", new { @class = "form-control default-date-picker" })

Sie müssen also keine Datenanmerkungen im Modell oder in der Ansichtsmodellklasse verwenden

Hasib Hasan Arnab
quelle
Ja, diese DataAnnotations eignen sich hervorragend für EditorFor-Helfer. Wenn Sie jedoch ein benutzerdefiniertes Raster mit einer IEnumerable (Of Entity) rendern, müssen Sie die .TextBoxFor verwenden, und dies war mein Problem. Danke
bkwdesign
22

Wenn Ihr Datenfeld bereits ein DateTime-Datentyp ist, müssen Sie ihn nicht [DataType(DataType.Date)]für die Anmerkung verwenden. benutz einfach:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

Verwenden Sie in der jQuery den Datepicker für Ihren Kalender

    $(document).ready(function () {
        $('#StartDate').datepicker();
    });

Verwenden Sie in Ihrem HTML-Code den EditorForHelfer:

    @Html.EditorFor(model => model.StartDate)
Toddt
quelle
"Wenn Ihr Datenfeld bereits ein DateTime-Datentyp ist, müssen Sie nicht verwenden [DataType(DataType.Date)]" => das war hilfreich
Hassan Tareq
Aber für Web-API wird das Anzeigeformat nicht erzwungen DataFormatString = "{0:MM/dd/yyyy}"(es wurden keine 400 angefordert, auch wenn der Anfragetext ein anderes Format hatte, dh {"dob":"31/12/1990"})
Hassan Tareq,
18

Wenden Sie DataAnnotation wie folgt an:

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]
Chirag
quelle
10

Verwenden Sie dies, aber es ist eine vollständige Lösung:

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
Renatto Machado
quelle
4

Verwenden Sie EditorFor anstelle von TextBoxFor

Absprachebdbh
quelle
1

Das ist für mich in Ordnung

[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
FelixAVeras
quelle
0

Stellen Sie Ihre Eigenschaft zum Zeitpunkt der Modellerstellung mit dem folgenden Code ein. Ich denke, Ihr Problem wird gelöst. Die Zeit wird nicht in der Datenbank angezeigt. Sie müssen keine Anmerkungen hinzufügen.

private DateTime? dob;
        public DateTime? DOB
        {
            get
            {
                if (dob != null)
                {
                    return dob.Value.Date;
                }
                else
                {
                    return null;
                }

            }
            set { dob = value; }
        }

quelle