Przypisać format DateTime z adnotacjami do danych?

99

Mam ten atrybut w moim modelu widoku:

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

Jeśli chcę wyświetlić datę lub wypełnić pole tekstowe datą, mam następujące:

<%: Model.StartDate %>

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

Zawsze, gdy wyświetlana jest data, jest wyświetlana w następujący sposób: 01/01/2011 12:00:00

Ale chciałbym wyświetlić tylko 01/01/2011

Czy istnieje sposób na zastosowanie formatu wyświetlania z adnotacjami do danych? Nie chcę iść do każdego wystąpienia, w którym wyświetlam datę, i dodawać kod, aby ją sformatować.

Steven
źródło

Odpowiedzi:

151

Spróbuj oznaczyć go tagiem:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
David Fox
źródło
Właśnie to wypróbowałem, nadal wyświetla czas w TextBox i kiedy jest wyświetlany na stronie.
Steven
3
@Steven: Czy możesz spróbować usunąć, [DataType(DataType.DateTime)]jeśli jeszcze tego nie zrobiłeś?
David Fox,
8
DisplayFormatdziała tylko EditorFori DisplayForpomocników.
Ε Г И І И О
1
Świetna odpowiedź - brakowało mi sekcji „ApplyFormatInEditMode”.
CodeHxr,
5
Udało mi się rozwiązać ten problem za pomocą parametru formatu w Html.TextBoxFor. Ustawiając ją na @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}"), mogłem uzyskać tylko datę do wyświetlenia. Znalazłem to tutaj [ stackoverflow.com/a/14529347/2938775] .
Caffeinius
44

Próbowałeś tego?

[DataType(DataType.Date)]
rk1962
źródło
2
Spowoduje to również włączenie obsługi selektora daty HTML5, jeśli przeglądarka ją obsługuje.
AaronLS
24

W mvc 4 możesz to łatwo zrobić tak, jak za pomocą TextBoxFor...

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

Nie musisz więc używać adnotacji danych w modelu ani widoku klasy modelu

Hasib Hasan Arnab
źródło
tak, te DataAnnotations działają świetnie dla pomocników EditorFor, ale podczas renderowania niestandardowej siatki z IEnumerable (Of Entity) musisz użyć .TextBoxFor i to był mój problem. Dzięki
bkwdesign
22

Jeśli twoje pole danych ma już typ danych DateTime, nie musisz używać go [DataType(DataType.Date)]do adnotacji; po prostu użyj:

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

w jQuery użyj DatePicker dla swojego kalendarza

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

w kodzie HTML użyj EditorForpomocnika:

    @Html.EditorFor(model => model.StartDate)
Toddt
źródło
"Jeśli twoje pole danych ma już typ danych DateTime, nie musisz używać [DataType(DataType.Date)]" => tego, co było pomocne
Hassan Tareq
Ale w przypadku interfejsu API sieci Web format wyświetlania nie jest wymuszany DataFormatString = "{0:MM/dd/yyyy}"(nie otrzymano żadnego 400 nawet żądania treści miało inny format, tj. {"dob":"31/12/1990"})
Hassan Tareq
18

Zastosuj adnotację danych, na przykład:

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]
Chirag
źródło
10

Użyj tego, ale to kompletne rozwiązanie:

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
Renatto Machado
źródło
4

Użyj EditorFor zamiast TextBoxFor

collusionbdbh
źródło
1

To działa dla mnie

[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
FelixAVeras
źródło
0

ustaw swoją właściwość za pomocą poniższego kodu w momencie tworzenia modelu myślę, że Twój problem zostanie rozwiązany ... a czas nie pojawia się w bazie danych. nie musisz dodawać adnotacji.

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

            }
            set { dob = value; }
        }

źródło