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()"