Отобразить свойство модели datetime в виде строки даты и времени - PullRequest
8 голосов
/ 22 февраля 2011

Я новичок в MVC2 и у меня проблема с форматированием. У меня есть свойство DateTime в моей модели Employee, которое я хотел бы отобразить с помощью Short Date Time.

Однако этот метод не является правильным.

1 <div class="editor-field">
2    <%: Html.TextBoxFor(model => model.DateRequested.ToShortDateString()) %>
3    <%: Html.ValidationMessageFor(model => model.DateRequested) %>
4 </div>

Строка 2 выдает это исключение:

Шаблоны могут использоваться только с полями доступ, доступ к собственности, индекс одномерного массива или индивидуальный индексатор с одним параметром выражения.

Как правильно обрабатывать форматирование в mvc?

Ответы [ 2 ]

28 голосов
/ 22 февраля 2011

Попробуйте украсить свойство модели представления с помощью атрибута [DisplayFormat]:

[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime DateRequested { get; set; };

и, по вашему мнению, используйте помощник Html.EditorFor:

<div class="editor-field">
    <%: Html.EditorFor(model => model.DateRequested) %>
    <%: Html.ValidationMessageFor(model => model.DateRequested) %>
</div>

или если вы настаиваете на использовании помощника для текстового поля (не знаю почему, но в любом случае вот как):

<div class="editor-field">
    <%: Html.TextBox("DateRequested", Model.DateRequested.ToShortDateString()) %>
    <%: Html.ValidationMessageFor(model => model.DateRequested) %>
</div>
2 голосов
/ 30 сентября 2011

Если вы хотите придерживаться вспомогательного метода html, попробуйте это:

public static MvcHtmlString TextBoxDateTime<TModel>(this HtmlHelper<TModel> helper,
             Expression<Func<TModel, DateTime>> expression, int tabIndex = 1)
    {
        var meta = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
        var propertyName = ExpressionHelper.GetExpressionText(expression);

        var input = new TagBuilder("input");
        input.MergeAttribute("id",
                             helper.AttributeEncode(helper.ViewData.TemplateInfo.GetFullHtmlFieldId(propertyName)));
        input.MergeAttribute("name",
                             helper.AttributeEncode(
                                 helper.ViewData.TemplateInfo.GetFullHtmlFieldName(propertyName)));
        input.MergeAttribute("value", ((DateTime)meta.Model).ToShortDateString());
        input.MergeAttribute("type", "text");
        input.MergeAttribute("class", "text cal");
        input.MergeAttribute("tabindex", tabIndex.ToString());
        input.MergeAttributes(helper.GetUnobtrusiveValidationAttributes(ExpressionHelper.GetExpressionText(expression), meta));
        return MvcHtmlString.Create(input.ToString());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...