Question

In my model I have the following DataAnnotations on one of my properties

[Required(ErrorMessage = "*")]
[DisplayFormat(DataFormatString = "{0:d}")]
[DataType(DataType.Date)]
public DateTime Birthdate { get; set; }

The required annotation works great, I added the other 2 to try and remove the time. It gets bound to an input in the view using

<%=Html.TextBoxFor(m => m.Birthdate, new { @class = "middle-input" })%>

However whenever the view loads I still get the time appearing in the input box. Is there anyway to remove this using DataAnnotations?

Was it helpful?

Solution

The [DisplayFormat] attribute is only used in EditorFor/DisplayFor, and not by the raw HTML APIs like TextBoxFor.

OTHER TIPS

As Brad said it dosn't work for TextBoxFor but you'll also need to remember to add the ApplyFormatInEditMode if you want it to work for EditorFor.

[DataType(DataType.Date), DisplayFormat( DataFormatString="{0:dd/MM/yy}", ApplyFormatInEditMode=true )]
public System.DateTime DateCreated { get; set; }

Then use

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

My problem was to set some html attributes (jquery-datepicker), so EditorFor was no option for me.

Implementing a custom helper-methode solved my problem:

ModelClass with DateTime-Property:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
public DateTime CustomDate{ get; set; }

View with ModelClass as Model:

@Html.TextBoxWithFormatFor(m => m.CustomDate, new Dictionary<string, object> { { "class", "datepicker" } })

Helper-Methode in static helper class:

public static class HtmlHelperExtension {
    public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        return htmlHelper.TextBox(htmlHelper.ViewData.TemplateInfo.GetFullHtmlFieldName(metadata.PropertyName), string.Format(metadata.DisplayFormatString, metadata.Model), htmlAttributes);
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top