MVC3 & Razor - Изменить строку DateTime с "мм / дд / гггг 12:00:00 AM" на "мм ​​/ дд / гггг" в текстовом поле - PullRequest
13 голосов
/ 12 февраля 2011

Я пытаюсь остановить отображение времени в текстовом поле дня рождения, которое использует 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; }

Тем не менее текст в текстовом поле отображает:

"21.08.2010 12:00:00 "

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

" 21.08.2010 "

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

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

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

Ответы [ 4 ]

16 голосов
/ 12 февраля 2011

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

[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 голосов
/ 12 февраля 2011

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

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

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

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

MSDN говорит следующее о ToShortDateString

Строка, возвращаемая Метод ToShortDateString культуры чувствительны к регистру. Это отражает шаблон определяется текущим объект DateTimeFormatInfo культуры. Например, для ан-американской культуры, стандартный шаблон короткой даты «М / д / гггг»; для культуры де-де, это is "dd.MM.yyyy"; для ja-JP культура, это "гггг / м / д". конкретная строка формата на конкретном компьютер также можно настроить так что это отличается от стандарта короткая строка формата даты.

1 голос
/ 28 января 2012

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

view:

@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/

0 голосов
/ 12 февраля 2011

Если у вас есть «Model.Birthday.ToString ()», вам нужно заменить его на «Model.Birthday.ToShortDateString ()»

...