У меня есть следующий код бритвы, в котором я хочу иметь mm/dd/yyyy
формат даты:
Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
Я пробовал несколько разных подходов, но ни один из них не работает в моей ситуации.
мой AuditDate - это DateTime?
тип
Я пробовал что-то подобное и получил эту ошибку:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Дополнительная информация: шаблоны можно использовать только с доступом к полю, доступом к свойствам, индексом одномерного массива или выражениями настраиваемого индексатора с одним параметром.
Пробовал это:
@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
Никакая перегрузка для метода ToString не принимает 1 аргумент
источник
No overload for method 'ToString' takes 1 arguments
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
ApplyFormatInEditMode = true
в собственность:[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
. Это должно быть очевидно, но когда у вас нет времени тратить время на копипаст, этот намек от intellisense может пройти мимо вашего носа, как и мой :)Если вы просто выводите значение этого свойства модели, вам не нужен
DisplayFor
помощник html, просто вызовите его напрямую с правильным форматированием строки .Audit Date: @Model.AuditDate.Value.ToString("d")
Должен выводить
Audit Date: 1/21/2015
Наконец, ваша дата аудита может быть нулевой, поэтому вам следует выполнить условную проверку, прежде чем пытаться отформатировать значение, допускающее значение NULL.
@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}
Поиск в Google ошибки, которую вы получаете, дает этот ответ , который показывает, что ошибка связана с использованием слова Model в ваших помощниках Html. Например, используя
@Html.DisplayFor(Model=>Model.someProperty)
. Измените их, чтобы использовать что-то другое, кромеModel
, например:@Html.DisplayFor(x=>x.someProperty)
или измените заглавнуюM
букву на строчнуюm
в этих помощниках.источник
@Model.AuditDate.Value.ToString("d")
Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
Html.DisplayFor
помощник. Не делай этого. Кроме того, уверены ли вы, что это вызывает ошибку в этой строке, а не в каком-то другом свойстве, для которого вы пытаетесь использоватьDisplayFor
помощник?@Model...
я получаю эту ошибку: «Модель» конфликтует с объявлением System.Web.Mvc.WebViewPage <TModel> .Model »Я использовал это изменение в своем коде:
старый код:
<td> @Html.DisplayFor(modelItem => item.dataakt) </td>
новый:
<td> @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy") </td>
источник
Ответ @CrisPratt об использовании шаблона отображения неверен. Правильный код для его работы:
@model DateTime? @if (Model.HasValue) { @Convert.ToDateTime(Model).ToString("MM/dd/yyyy") }
Это потому, что
.ToString()
forNullable<DateTime>
не принимаетFormat
параметр .источник
Я реализовал подобное так:
2. Задайте нулевой контур и нулевую границу для TextBox в CSS.
.my-style { outline: none; border: none; }
И ... Готово :)
источник
Для меня было достаточно использовать
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { set; get; }
источник
Вы можете использовать атрибут [ DisplayFormat ] в своей модели представления, если хотите применить этот формат для всего проекта.
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] public Nullable<System.DateTime> Date { get; set; }
источник
После некоторых копаний я закончил тем, что установил
Thread
для значения CurrentCulture значение CultureInfo ("en-US") в методе действия контроллера:Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Вот несколько других вариантов, если вы хотите, чтобы этот параметр был в каждом представлении.
О
CurrentCulture
стоимости недвижимости:Источник: MSDN CurrentCulture.
Примечание . Предыдущее
CurrentCulture
значение свойства, вероятно, является необязательным, если контроллер уже работает сCultureInfo("en-US")
форматом даты или аналогичным ему"MM/dd/yyyy"
.После установки
CurrentCulture
свойства добавьте блок кода для преобразования даты в"M/d/yyyy"
формат представления:@{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @shortDateLocalFormat
Сверху
@shortDateLocalFormat
переменная отформатированаToString("M/d/yyyy")
произведениями. ЕслиToString("MM/dd/yyyy")
используется, как я сделал вначале, тогда у вас будет нулевая проблема . Также, как рекомендовано Томми,ToString("d")
тоже работает. Фактически"d"
означает «Краткий шаблон даты» и может использоваться с различными культурными / языковыми форматами.Я предполагаю, что блок кода сверху также можно заменить каким-нибудь классным вспомогательным методом или чем-то подобным.
Например
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat }
может использоваться с этим вспомогательным вызовом
@DateFormatter(Model.AuditDate)
Обновление , я обнаружил, что есть альтернативный способ сделать то же самое, когда используется метод DateTime.ToString (String, IFormatProvider) . При использовании этого метода , то нет никакой необходимости использовать
Thread
«sCurrentCulture
собственности.CultureInfo("en-US")
Передается в качестве второго аргумента -> IFormatProvider кDateTime.ToString(String, IFormatProvider)
методу.Модифицированный вспомогательный метод:
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat }
.NET Fiddle
источник
Может попробовать просто
@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)
также вы можете использовать многие типы строковых форматов, например .ToString ("dd MMM, yyyy") .ToString ("d") и т. д.
источник
@model
это не узнаетM
при использовании на HTML-странице, нижний регистрm
при объявлении.No overload for method 'ToString' takes 1 arguments
жалуются, когда я используюToString("mm/dd/yyyy")
В представлении Замените это:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
С участием:
@if(@Model.AuditDate.Value != null){@Model.AuditDate.Value.ToString("dd/MM/yyyy")} else {@Html.DisplayFor(Model => Model.AuditDate)}
Объяснение: Если значение AuditDate не равно нулю, тогда дата будет отформатирована как дд / ММ / гггг, в противном случае оставьте это как есть, потому что оно не имеет значения.
источник
У меня была аналогичная проблема на моем контроллере, и вот что сработало для меня:
model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : ""
«DateSigned» - это значение из моей модели. Строка гласит: если значение модели имеет значение, отформатируйте значение, иначе ничего не покажет.
надеюсь, это поможет
источник
Это лучший способ получить простую строку даты:
@DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()
источник
HtmlString
выводDisplayFor
, преобразует его вString
, анализирует как, аDateTime
затем форматирует какString
. На мой взгляд, излишне сложный.Вы можете использовать Convert
<td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td>
источник
См. Этот ответ об
No overload for method 'ToString' takes 1 arguments
ошибке.Вы не можете форматировать DateTime, допускающее значение NULL - вы должны использовать свойство DateTime.Value.
@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty
источник
'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'