Formatieren auf NULL festlegbare Datetime Felder in stark typisierten Ansicht
-
02-10-2019 - |
Frage
Ich habe eine Person-Klasse mit einer BornDate Eigenschaft in meinem Modell definiert als
[DisplayName("Born Date")]
public DateTime? BornDate { get; set; }
ich dieses Feld in meiner Ansicht verwenden, wie
<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>
Das Problem ist, dass, wenn ich die Bearbeitung einer Person-Instanz mit dem BornDate Textfeld formatiert als
dd/MM/yyyy hh.mm.ss
, während ich mag es zu formatieren, ohne den Zeitteil ( „TT / MM / yyyy“). Ich bin nicht in der Lage, die toString-Methode mit dem Format-String zu verwenden, da es sich um ein Nullable-Feld ist.
Was kann ich tun?
Lösung
Es soll möglich sein, Wert zu verwenden. Stellt sicher, es ist nicht null zuerst.
var displayDate = model.BornDate.HasValue ? model.BornDate.Value.ToString("yyyy") : "NoDate";
Andere Tipps
Ich weiß, das ist sehr spät, aber ich erforschte ein anderes Problem und kam in dieser Frage. Es gibt einen Weg, um nur den Datumsteil zu zeigen, die nicht Präsentationsschicht erfordert die Formatierung.
[DisplayName("Born Date")]
[DataType(DataType.Date)]
public DateTime? BornDate { get; set; }
Dies wird gewährleistet, dass überall Sie binden an diese Eigenschaft auf Ihrer Ansicht, nur das Datum zeigen
Hope, das hilft jemand
diese in Ihrer Ansicht zu tun, können Sie Razor-Syntax verwenden, auch:
@Html.TextBox("BornDate", item.BornDate.HasValue ? item.BornDate.Value.ToShortDateString():"")
Sie können dies tun, wird es mit Nullable Modelltypen arbeiten:
@model DateTime?
@{
object txtVal = "";
if (Model.HasValue)
{
txtVal = Model.Value;
};
}
@Html.TextBoxFor(x => Model, new {Value = string.Format(ViewData.ModelMetadata.EditFormatString, txtVal))
Eine andere Art, wie ich dieses Problem in Angriff genommen habe, ist durch das Hinzufügen Format an den TextBoxFor
@Html.TextBoxFor(model => model.BornDate, "{0:MM/dd/yyyy}", new { id = "bornDate" })