Каков наилучший способ применить форматирование даты по умолчанию ко всем таким полям в приложении ASP.NET MVC 3? - PullRequest
7 голосов
/ 06 июля 2011

Мои цели:

  • Отображение все даты в d MMM yyyy формате
    • Стандартные / существующие значения при загрузке первой страницы
    • Все, что было введено пользователем, а затем через сервер
  • Добавьте class="behaviour-date-picker" в поле ввода, чтобы я мог отобразить средство выбора даты jQuery
  • Построить наверхняя часть инфраструктуры System.ComponentModel.DataAnnotations
  • По-прежнему отображаются неверные значения данных, например 12 Joone 2010 после обхода сервера, с соответствующим сообщением об ошибке проверки

Вот пример модели:

public class DebugDatesStub
{
    [DataType(DataType.Date)]
    public DateTimeOffset Date { get; set; }
}

Атрибут DisplayFormat не решает мой сценарий, потому что он не применяется к значениям с округленными значениями.(Пользователь заполняет форму, отправляет ее, получает ту же форму обратно из-за некоторой проблемы с проверкой на стороне сервера - дата по-прежнему отображается в исходном формате, который они ввели, а не переформатируется.)

Ответы [ 2 ]

0 голосов
/ 20 июля 2011

Визуализация поля на странице с помощью:

@Html.EditorFor(m => m.Date)

Создать этот код в ~\Views\Shared\EditorTemplates\Date.cshtml:

@using System.Globalization
@model DateTimeOffset?

@{
    var propertyState = ViewData.ModelState[ViewData.ModelMetadata.PropertyName];
    var displayValue =
        propertyState != null && propertyState.Errors.Any() ? propertyState.Value.AttemptedValue :
        ViewData.Model.HasValue ? string.Format("{0:d MMM yyyy}", ViewData.Model.Value) :
        string.Empty;

    ViewData.ModelState.SetModelValue(
        ViewData.ModelMetadata.PropertyName,
        new ValueProviderResult(displayValue, displayValue, CultureInfo.CurrentCulture));
}

@Html.TextBoxFor(m => m, new { @class = "behaviour-date-picker" })
0 голосов
/ 06 июля 2011

У меня была похожая проблема, и я решил ее примерно так (код взят из примера из WebGrid, надеюсь, это даст вам представление):

@{
    var viewDictionary = new ViewDataDictionary<DebugDatesStub>(new DebugDatesStub());
}

...
ModelMetadata.FromLambdaExpression(d => d.DateTimeOffset, viewDictionary).PropertyName,
ModelMetadata.FromLambdaExpression(d => d.DateTimeOffset, viewDictionary).DisplayName,
format: (item) => { return new HtmlString(item.DateTimeOffset.ToString("MMM yyyy hh:mm:ss")); })
...
...