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