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.


Antworten:


149

Versuchen Sie es mit folgenden Tags zu versehen:

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

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)]

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


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)

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

10

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

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



1

Das ist für mich in Ordnung

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

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; }
        }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.