47 votes

ASP.Net MVC DisplayFormat

Dans mon modèle, j'ai les DataAnnotations suivantes sur l'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 à l'aide de

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

Cependant, lorsque la vue se charge, l'heure apparaît toujours dans le champ de saisie. Existe-t-il un moyen de le supprimer en utilisant les DataAnnotations ?

89voto

Brad Wilson Points 22910

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

28voto

Paul Johnson Points 734

Comme Brad l'a dit, cela ne fonctionne pas pour TextBoxFor, mais vous devrez également vous souvenir d'ajouter ApplyFormatInEditMode si vous voulez que cela fonctionne pour EditorFor.

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

Ensuite, utilisez

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

8voto

Tobias Points 938

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

L'implémentation d'un mode d'aide personnalisé a résolu mon problème :

ModelClass avec DateTime-Property :

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

Vue avec ModelClass comme modèle :

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

Helper-Methode dans la classe d'aide statique :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X