ASP.Net MVC DisplayFormat

dans mon modèle j'ai les annotations de données suivantes sur une de mes propriétés

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

l'annotation requise fonctionne très bien, j'ai ajouté les 2 autres pour essayer de supprimer le temps. Il est lié à une entrée dans la vue en utilisant

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

Cependant chaque fois que la vue charge je reçois encore l'heure apparaissant dans la boîte de saisie. Y a-t-il une façon de supprimer cela en utilisant DataAnnotations?

46
demandé sur Mathieu 2010-01-04 22:52:23

3 réponses

l'attribut [DisplayFormat] n'est utilisé que dans EditorFor/DisplayFor, et non par les API HTML brutes comme TextBoxFor.

84
répondu Brad Wilson 2010-01-05 07:56:14

comme Brad l'a dit, cela ne fonctionne pas pour TextBoxFor, mais vous aurez également besoin de se rappeler d'ajouter le ApplyFormatInEditMode si vous voulez qu'il fonctionne pour EditorFor.

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

puis utiliser

@Html.EditorFor(model => model.DateCreated)
28
répondu Paul Johnson 2012-04-30 09:36:00

mon problème était de définir quelques attributs html (jquery-datepicker), donc EditorFor n'était pas une option pour moi.

implémenter un helper-methode personnalisé résolu mon problème:

ModelClass avec DateTime-Propriété:

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

voir avec ModelClass comme Modèle:

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

Helper-Methode statique de la classe helper:

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);
    }
}
7
répondu Tobias 2014-02-27 14:14:46