ASP.NET MVC Core date only format is not working using DataAnnotation
Asked Answered
D

1

6

Following viewmodel used in a view is supposed to display a StartDate as, say 9/30/2015. But it is displaying as 9/30/2015 12:00:00 AM. How can I make it display without time while using DataAnnotaion? I know I can use @Model.StartDate.ToString("MM/dd/yyy") inside view to display date only. But that would mean you have to do it in every view that is using the following ViewModel:

ViewModel:

...
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime StartDate { get; set; }
...

UPDATE

The corresponding model class of the above ViewModel already has the following DataAnnotation that correctly creates the data type in SQL Server table as Date; and when you run a query on the corresponding table in SSMS it correctly displays the StartDate column's data with dates only, say, 9/30/2015 etc.)

Model

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

StartDate in the sql db is in fact Date only. Moreover, if I run a query on SSMS it correctly returns date only.

Declarative answered 27/7, 2017 at 21:49 Comment(8)
Have you tried just using the [DataType(DataType.Date)] attribute?Miramirabeau
@ErikFunkenbusch To answer your question, I've added an UPDATE section to my post. Moreover, I did try your suggestion on the ViewModel as well but to no avail.Declarative
Using the DataType attribute should work if your rendering with EditorFor or DisplayFor.Miramirabeau
FYI, here's a fiddle that demonstrates dotnetfiddle.net/urdrHMMiramirabeau
@ErikFunkenbusch In my view I'm using @Model.StartDate. Per your suggestion I should be using DisplayFor instead - correct?Declarative
Probably. If you just reference the variable, it's not going to use your data attributes. You need to use DisplayFor or EditorFor to recognize them. Otherwise you would have to do @Model.StartDate.Format("d")Miramirabeau
@ErikFunkenbusch But @Model.StartDate is still displaying the date except that it's including default time as well such 9/30/2015 12:00AM. And VS2017 does not recognize @Model.StartDate.Format("d")Declarative
Let us continue this discussion in chat.Declarative
M
11

There are two solutions to your problem. As per your comments, you are currently using @Model.StartDate to display a date.

You can either do this:

@Model.StartDate.ToString("d")

Or, you can use a model based approach in your ViewModel and do this:

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

Then, in your view use:

@Html.DisplayFor(m => m.StartDate)
Miramirabeau answered 28/7, 2017 at 21:22 Comment(1)
Last comment that you added in our chat room may answer my this. If you like you can write a response there and I'll mark that as an answer.Declarative

© 2022 - 2024 — McMap. All rights reserved.