Подтвердить что ты не робот

ASP.Net MVC DisplayFormat

В моей модели у меня есть следующие DataAnnotations по одному из моих свойств

[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?

4b9b3361

Ответ 1

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

Ответ 2

Поскольку Брэд сказал, что он не работает для 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)

Ответ 3

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

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

ModelClass с DateTime-Property:

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