ASP.Net MVC DisplayFormat - PullRequest
       18

ASP.Net MVC DisplayFormat

47 голосов
/ 04 января 2010

В моей модели у меня есть следующие аннотации данных на одном из моих свойств

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

Требуемая аннотация работает отлично, я добавил еще 2, чтобы попытаться убрать время. Он привязывается к входу в представлении, используя

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

Однако всякий раз, когда загружается представление, я все равно получаю время, отображаемое в поле ввода. Есть ли способ удалить это с помощью DataAnnotations?

Ответы [ 3 ]

87 голосов
/ 05 января 2010

Атрибут [DisplayFormat] используется только в EditorFor / DisplayFor, а не необработанными API-интерфейсами HTML, такими как TextBoxFor.

28 голосов
/ 30 апреля 2012

Как сказал Брэд, это не работает для TextBoxFor, но вам также нужно помнить о том, чтобы добавить ApplyFormatInEditMode, если вы хотите, чтобы он работал для EditorFor.

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

Тогда используйте

@Html.EditorFor(model => model.DateCreated)
8 голосов
/ 27 февраля 2014

Моя проблема заключалась в том, чтобы установить некоторые атрибуты html (jquery-datepicker), поэтому EditorFor не был для меня вариантом.

Реализация пользовательского вспомогательного метода решила мою проблему:

ModelClass с DateTime-Свойство:

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

Просмотр с ModelClass как модель:

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

Метод-помощник в статическом классе помощника:

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