I use MVC4 with razor.

I ran into the problem of formating correctly a DateTime property of my model that I render in the view using a TextBoxFor MVC helper. The default formatting displays the full date with hours, minutes and seconds :

 

@Html.TextBoxFor(m => m.BeginDate)

 

displays “27/04/2012 00:00:00” in the textbox. I only needed the first part so I wanted to use the ‘d’ format.

I then tried to use DataAnnotations to impose a format to the property to display:

 

[DisplayFormat(DataFormatString = "{0:d}")]
        public DateTime BeginDate { get; set; }

 

Still, the generated textbox has the full date displayed : “27/04/2012 00:00:00”

 

There are actually 2 solutions to that :

 

 

1- Use DataAnnotations + EditorFor

 

The dataannotation DisplayFormat is actually NOT taken into account when the data is rendered with @Html.TextBoxFor helper. It applies only to the EditorFor helper.

So, keeping your dataannotation and replacing your helper by this shoud work :

 

@Html.EditorFor(m => m.BeginDate)

 

 

2 -Use TextBoxFor and alter the @Value parameter

 

If you really want your TextBoxFor, there is also a solution which I find less desirable since it tinkles with the default behavior of TextBoxFor.

You can remove the DisplayFormat data annotation and use this helper :

 

@Html.TextBoxFor(m => m.BeginDate, new { @Value = Model.BeginDate.ToString("d") })