Если в моем классе модели есть свойство типа, DateTime
как я могу отобразить его в определенном формате - например, в формате, который ToLongDateString()
возвращается?
Я пробовал это ...
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
... который вызывает исключение, потому что выражение должно указывать на свойство или поле. И это...
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
... который не вызывает исключения, но выводимый результат пуст (хотя и val
содержит ожидаемое значение, как я мог видеть в отладчике).
Заранее спасибо за советы!
редактировать
ToLongDateString
это только пример. На самом деле я хочу использовать вместо этого ToLongDateString
собственный метод расширения DateTime
и DateTime?
:
public static string FormatDateTimeHideMidNight(this DateTime dateTime)
{
if (dateTime.TimeOfDay == TimeSpan.Zero)
return dateTime.ToString("d");
else
return dateTime.ToString("g");
}
public static string FormatDateTimeHideMidNight(this DateTime? dateTime)
{
if (dateTime.HasValue)
return dateTime.Value.FormatDateTimeHideMidNight();
else
return "";
}
Итак, я думаю, что не могу использовать DisplayFormat
атрибут и DataFormatString
параметр в свойствах ViewModel.
источник
Вы можете украсить свойство модели представления
[DisplayFormat]
атрибутом:и на ваш взгляд:
или, для отображения значения,
Другой вариант, который я не рекомендую, - это использовать слабо типизированный помощник:
источник
DateTime
(ToLongDateString был только примером), поэтому маловероятно, что я смогу использоватьDataFormatString
.@Html.DisplayFor(x => x.MyDateTime)
. @NickLarsen - вот почему следует использовать модели просмотра. В моем примере я украшаю модель представления этим атрибутом, и представление уже привязано к данному представлению, это его цель.Простой форматированный вывод внутри модели
или в цикле foreach
источник
string.Format
Я использую следующий подход для встроенного формата и отображения свойства даты из модели.
В противном случае при заполнении TextBox или Editor вы могли бы сделать как предложил @Darin, украсив атрибут
[DisplayFormat]
атрибутом.источник
Если все ваши
DateTime
типы отображаются одинаково, вы можете использовать настраиваемыйDateTime
шаблон отображения.В папке представлений создайте папку с именем «DisplayTemplates» либо в папке конкретных представлений вашего контроллера, либо в папке «Общие» (они работают аналогично частичным).
Внутри создайте файл с именем,
DateTime.cshtml
который принимаетDateTime
в качестве@model
кода и код того, как вы хотите отобразить дату:Теперь вы можете просто использовать это в своих представлениях, и он должен работать:
Пока вы следуете соглашению о добавлении его в папку «DisplayTemplates» и присваивании имени файлу в соответствии с отображаемым вами типом, MVC будет автоматически использовать это для отображения ваших значений. Это также работает для сценариев редактирования с использованием «EditorTemplates».
Вот еще немного информации о шаблонах .
источник
DateTime
. Однако у меня есть несколько свойств DateTime, допускающих значение NULL. Я попытался создать второй файл вDisplayTemplates
папке с именемNullableDateTime.cshtml
и внутри:@using MyHelpers @model System.DateTime? @Model.MyCustomExtension()
ЗдесьMyCustomExtension
метод расширенияDateTime?
. Однако возникает исключение, когда DateTime? field действительно имеет значение null, что говорит мне, что для словаря требуется элемент модели, типDateTime
которого не равен нулю. Есть ли способ определить DisplayTemplate для DateTime, допускающего значение NULL?NullableDateTime.cshtml
и использовал подход, который предложил и использовал @NickLarsen@Html.DisplayFor(m => m.MyDateTime, "NullableDateTime")
.Я предпочитаю сохранять детали форматирования с представлением, а не с моделью представления. Итак, в MVC4 / Razor:
Ссылка на формат datetime: http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx
Затем у меня есть привязанный к нему JQuery datepicker, и он помещает дату в другом формате ... doh!
Похоже, мне нужно установить формат datepicker в такое же форматирование.
Поэтому я сохраняю
System.Globalization
форматирование в атрибуте data- * и собираю его при настройкеИ вот отстой: форматы .net и datepicker не совпадают, поэтому требуется хакерство:
это слабовато, но должно охватывать множество случаев.
источник
работает для меня
источник
Недавно была такая же проблема.
Я обнаружил, что простое определение DataType как Date в модели также работает (с использованием подхода Code First)
источник
ты можешь сделать это
@item.Date.Value.Tostring("dd-MMM-yy");
источник
если я просто хочу отобразить дату в коротком формате, я просто использую @ Model.date.ToShortDateString (), и он печатает дату в
источник
Если все, что вы хотите сделать, это отобразить дату в определенном формате, просто позвоните:
Это приведет к следующему формату,
источник
это будет отображаться в
dd/MM/yyyy
формате в вашем представленииВвиду:
вместо
DisplayFor
использования этого кодаон также проверяет, является ли значение null в столбце даты, если оно истинно, то будет отображаться Date is Empty или фактическая отформатированная дата из столбца.
Надежда кому-то помогает.
источник
источник
В MVC5 я бы использовал, если ваша модель - datetime
Или, если ваша модель содержит свойство datetime
Вот официальное значение форматов:
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
источник
Только Просмотр файла Отрегулируйте так. Вы можете попробовать это.
item.transdate
этоDateTime
данные вашего типа.источник