Форматирование обнуляемых полей DateTime в строго типизированном представлении

У меня есть класс Person со свойством BornDate в моей модели, определенной как

[DisplayName("Born Date")]
public DateTime? BornDate { get; set; }

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

<td style="white-space:nowrap">
    <%= Html.LabelFor(model => model.BornDate)%>
    <br />
    <%= Html.TextBoxFor(model => model.BornDate, new { id = "bornDate" })%>
    <%= Html.ValidationMessageFor(model => model.BornDate, "*")%>
</td>

Проблема в том, что когда я редактирую экземпляр Person с текстовым полем BornDate отформатирован как

dd/MM/yyyy hh.mm.ss

в то время как я хотел бы отформатировать его без временной части ("дд / мм / гггг"). Я не могу использовать метод toString со строкой формата, потому что это пустое поле.

А что я могу сделать?

4 ответа

Решение

Вы должны быть в состоянии использовать значение. Просто проверьте, что это не ноль в первую очередь.

var displayDate = model.BornDate.HasValue ? model.BornDate.Value.ToString("yyyy") : "NoDate";

Я знаю, что очень поздно, но я исследовал другую проблему и столкнулся с этой проблемой. Есть способ показать только часть даты, которая не требует форматирования слоя представления.

[DisplayName("Born Date")]
[DataType(DataType.Date)]
public DateTime? BornDate { get; set; }

Использование этого параметра гарантирует, что везде, где вы привязываетесь к этому свойству в вашем представлении, будет отображаться только дата

Надеюсь, это кому-нибудь поможет

Чтобы сделать это в вашем VIEW, вы также можете использовать синтаксис Razor:

 @ Html.TextBox ("BornDate", item.BornDate.HasValue? Item.BornDate.Value.ToShortDateString():"") 

Вы можете сделать это, он будет работать с типами моделей Nullable:

@model DateTime?
@{
    object txtVal = "";
    if (Model.HasValue) 
    {
        txtVal = Model.Value;
    };
}
@Html.TextBoxFor(x => Model, new {Value = string.Format(ViewData.ModelMetadata.EditFormatString, txtVal))

Еще один способ решить эту проблему - добавить формат в TextBoxFor.

@Html.TextBoxFor(model => model.BornDate, "{0:MM/dd/yyyy}", new { id = "bornDate" })
Другие вопросы по тегам