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?
3 réponses
l'attribut [DisplayFormat] n'est utilisé que dans EditorFor/DisplayFor, et non par les API HTML brutes comme TextBoxFor.
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)
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);
}
}