116

I have this attribute in my view model:

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

If I want to display the date, or populate a textbox with the date, I have these:

<%: Model.StartDate %>

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

Whenever the date is displayed, it's displayed like: 01/01/2011 12:00:00 AM

But I'd like to only display 01/01/2011

Is there a way to apply a display format with data annotations? I don't want to have to go to every instance where I display a date, and add some code to format it.

1

11 Answers 11

170

Try tagging it with:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
Sign up to request clarification or add additional context in comments.

7 Comments

Just tried that, it still displays the time in the TextBox and when it's just displayed on the page.
@Steven: Can you try removing [DataType(DataType.DateTime)] if you haven't already?
DisplayFormat works only with EditorFor and DisplayFor helpers.
Great answer - I was missing the "ApplyFormatInEditMode" parm.
I was able to resolve this by format parameter in Html.TextBoxFor. By setting it to @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}") I was able to get just the date to display. Found this here [stackoverflow.com/a/14529347/2938775].
|
61

Did you try this?

[DataType(DataType.Date)]

1 Comment

This will also enable HTML5 date selector support, if the browser supports it.
27

In mvc 4 you can easily do it like following using TextBoxFor..

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

So, you don't need to use any data annotation in model or view model class

1 Comment

yup, those DataAnnotations work great for EditorFor helpers, but, when rendering a custom grid with an IEnumerable(Of Entity) you have to use the .TextBoxFor and this was my issue. Thanks
23

If your data field is already a DateTime datatype, you don't need to use [DataType(DataType.Date)] for the annotation; just use:

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

on the jQuery, use datepicker for you calendar

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

on your HTML, use EditorFor helper:

    @Html.EditorFor(model => model.StartDate)

2 Comments

"If your data field is already a DateTime data type, you don't need to use [DataType(DataType.Date)]" => that was helpful
But for web api, display format is not enforcing DataFormatString = "{0:MM/dd/yyyy}" (did not get any 400 even request body had other format i.e. {"dob":"31/12/1990"})
19

Apply DataAnnotation like:

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

Comments

13

Use this, but it's a complete solution:

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

Comments

7

That works for me

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

1 Comment

The ApplyFormatInEditMode was the solution ! Thx
5

After Commenting

          // [DataType(DataType.DateTime)] 

Use the Data Annotation Attribute:

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

STEP-7 of the following link may help you...

http://ilyasmamunbd.blogspot.com/2014/12/jquery-datepicker-in-aspnet-mvc-5.html

Comments

4

Use EditorFor rather than TextBoxFor

Comments

2

This is my favourite way to do that with anotations in your model:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyy}")]

Comments

0

set your property using below code at the time of model creation i think your problem will be solved..and the time are not appear in database.you dont need to add any annotation.

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

            }
            set { dob = value; }
        }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.