Форматирование обнуляемых полей 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" })