MVC3 & Razor - изменить DateTime String с "mm/dd/yyyy 12:00:00 AM" на "mm/dd/yyy" в текстовом поле

Я пытаюсь остановить отображение времени в текстовом поле дня рождения, которое использует DateTime

Мой код: (Я использую JQuery DatePicker)

<label for="birthday">Birthday:</label>
            @Html.TextBox("birthday", (Model.Birthday.ToString()), new { @class = "datePicker" })

Javascript:

$(document).ready(function () {
    $('.datePicker').datepicker({ showOn: 'both', buttonImage: "/content/images/calendar-red.gif" });
});

У меня есть настройка модели для даты:

[DataType(DataType.Date)]
public DateTime? Birthday { get; set; }

Пока отображается текст в текстовом поле:

"8/21/2010 12:00:00 AM"

Я хочу, чтобы текст в текстовом поле выглядел так:

"8/21/2010"

Я пробовал все:

@inherits System.Web.Mvc.WebViewPage<System.DateTime>

но не позволяйте мне делать это, так как я @использую модель

Ответы

Ответ 1

Я бы использовал шаблон редактора и аннотации данных в модели представления, чтобы указать форматирование, которое делает просмотр более чистым:

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

а затем внутри вашего представления:

<span class="datePicker">
    @Html.LabelFor(x => x.Birthday)
    @Html.EditorFor(x => x.Birthday)
</span>

а затем адаптируйте селектор, потому что текстовое поле больше не будет иметь класс datePicker:

$('.datePicker :text').datepicker({ 
    showOn: 'both', 
    buttonImage: "/content/images/calendar-red.gif" 
});

Ответ 2

Попробуйте изменить на это:

@Html.TextBox("birthday", (Model.Birthday.Value.ToShortDateString()), new { @class = "datePicker" })

Поскольку ваш DateTime Nullable, вам нужно сделать .Value, прежде чем вы сможете получить доступ к методам DateTime.

При вызове ToString на DateTime он даст вам дату + время. Поэтому вместо вызова ToString вы хотите использовать ToString с форматированием или ToShortDateString.

У MSDN есть следующее: ToShortDateString

Строка, возвращаемая Метод ToShortDateString культуры чувствительны к регистру. Он отражает шаблон, определенный текущим культура Объект DateTimeFormatInfo. Например, для культуры в США, стандартный шаблон коротких дат "М/д/гггг"; для культуры de-DE, это "dd.MM.yyyy"; для ja-JP культуры, это "yyyy/M/d". конкретная строка формата для определенного компьютер также можно настроить таким образом что он отличается от стандартного короткая строка формата даты.

Ответ 3

Я действительно сталкивался с этой проблемой с Razor, используя MVC 3. Мне пришлось создать Partial Class DateTime в Shared/EditorTemplates, чтобы получить нужные мне атрибуты.
Ранее мой взгляд был: @Html.TextBoxWithAttributesFor(m => m.To, new { @class = "text-box", @readonly = "readonly" }), но это продолжало давать мне TimeStamp. Даже когда я пробовал .Value.DateTime или любую другую работу. Но мое текущее рабочее решение:

Вид:

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

частичный класс:

@model System.DateTime
@Html.TextBox("", (Model.ToShortDateString()), new { @class = "text-box", @readonly = "readonly" })

Я использовал эту страницу как второй источник: http://buildstarted.com/2010/09/10/overriding-displayfor-and-editorfor-to-create-custom-outputs-for-mvc/

Ответ 4

Где у вас есть "Model.Birthday.ToString()", вам нужно заменить его на "Model.Birthday.ToShortDateString()"