Wenn ich in meiner Modellklasse eine Eigenschaft vom Typ habe, DateTime
wie kann ich sie in einem bestimmten Format rendern - zum Beispiel in dem Format, das ToLongDateString()
zurückgibt?
Ich habe es versucht ...
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
... was eine Ausnahme auslöst, da der Ausdruck auf eine Eigenschaft oder ein Feld verweisen muss. Und das...
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
... was keine Ausnahme auslöst, aber die gerenderte Ausgabe ist leer (obwohl sie val
den erwarteten Wert enthält, wie ich im Debugger sehen konnte).
Vielen Dank für Tipps im Voraus!
Bearbeiten
ToLongDateString
ist nur ein Beispiel. Was ich eigentlich anstelle von verwenden möchte, ToLongDateString
ist eine benutzerdefinierte Erweiterungsmethode von DateTime
und 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 "";
}
Daher kann ich das DisplayFormat
Attribut und den DataFormatString
Parameter in den ViewModel-Eigenschaften nicht verwenden.
quelle
Sie können Ihre Ansichtsmodelleigenschaft mit dem folgenden
[DisplayFormat]
Attribut dekorieren :und aus Ihrer Sicht:
oder zur Anzeige des Wertes
Eine andere Möglichkeit, die ich nicht empfehle, ist die Verwendung eines schwach typisierten Helfers:
quelle
DateTime
(ToLongDateString war nur ein Beispiel), so dass es unwahrscheinlich ist, dass ich es verwenden kannDataFormatString
.@Html.DisplayFor(x => x.MyDateTime)
. @NickLarsen das ist der Grund, warum Ansichtsmodelle verwendet werden sollten. In meinem Beispiel dekoriere ich das Ansichtsmodell mit diesem Attribut und eine Ansicht ist bereits an eine bestimmte Ansicht gebunden, das ist ihr Zweck.Einfache formatierte Ausgabe innerhalb des Modells
oder in der foreach-Schleife
quelle
string.Format
Ich verwende den folgenden Ansatz, um das Inline-Format zu verwenden und eine Datumseigenschaft aus dem Modell anzuzeigen.
Andernfalls könnten Sie beim Auffüllen einer TextBox oder eines Editors wie von @Darin vorgeschlagen das Attribut mit einem
[DisplayFormat]
Attribut dekorieren .quelle
Wenn alle Ihre
DateTime
Typen auf dieselbe Weise gerendert werden, können Sie eine benutzerdefinierteDateTime
Anzeigevorlage verwenden.Erstellen Sie in Ihrem Ansichtsordner einen Ordner mit dem Namen "DisplayTemplates", entweder unter Ihrem Controller-spezifischen Ansichtsordner oder unter dem Ordner "Shared" (diese funktionieren ähnlich wie Partials).
Erstellen Innerhalb einer Datei mit dem Namen
DateTime.cshtml
, der nimmtDateTime
die wie@model
und Code , wie Sie Ihr Datum machen möchten:Jetzt können Sie dies einfach in Ihren Ansichten verwenden und es sollte funktionieren:
Solange Sie der Konvention folgen, sie dem Ordner "DisplayTemplates" hinzuzufügen und die Datei so zu benennen, dass sie dem von Ihnen angezeigten Typ entspricht, verwendet MVC diese automatisch, um Ihre Werte anzuzeigen. Dies funktioniert auch zum Bearbeiten von Szenarien mit "EditorTemplates".
Hier finden Sie weitere Informationen zu Vorlagen .
quelle
DateTime
. Ich habe jedoch einige nullfähige DateTime-Eigenschaften. Ich habe versucht, eine zweite Datei in demDisplayTemplates
Ordner zu erstellen , genanntNullableDateTime.cshtml
und innerhalb von:@using MyHelpers @model System.DateTime? @Model.MyCustomExtension()
HierMyCustomExtension
ist eine Erweiterungsmethode fürDateTime?
. Es kommt jedoch zu einer Ausnahme, wenn eine DateTime? Feld ist wirklich null und sagt mir, dass das Wörterbuch ein Modellelement vom Typ benötigt,DateTime
das nicht null ist. Gibt es eine Möglichkeit, eine DisplayTemplate für eine nullfähige DateTime zu definieren?NullableDateTime.cshtml
@NickLarsen vorgeschlagenen und verwendeten Ansatz halten@Html.DisplayFor(m => m.MyDateTime, "NullableDateTime")
.Ich bevorzuge es, die Formatierungsdetails mit der Ansicht und nicht mit dem Ansichtsmodell beizubehalten. Also in MVC4 / Razor:
Referenz zum Datum / Uhrzeit-Format: http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx
Dann habe ich einen JQuery-Datepicker daran gebunden, und das gibt das Datum in einem anderen Format an ... doh!
Sieht so aus, als müsste ich das Format des Datepickers auf dieselbe Formatierung einstellen.
Also speichere ich die
System.Globalization
Formatierung in einem data- * Attribut und sammle sie beim Einrichten desUnd hier ist der blöde Teil: Die Formate von .net und Datepicker stimmen nicht überein, daher ist Hackery erforderlich:
Das ist etwas schwach, sollte aber viele Fälle abdecken.
quelle
funktioniert bei mir
quelle
Hatte vor kurzem das gleiche Problem.
Ich habe festgestellt, dass das einfache Definieren von DataType als Datum im Modell ebenfalls funktioniert (unter Verwendung des Code First-Ansatzes).
quelle
Sie können so tun
@item.Date.Value.Tostring("dd-MMM-yy");
quelle
Wenn ich das Datum nur im Kurzformat anzeigen möchte, verwende ich einfach @ Model.date.ToShortDateString () und es druckt das Datum in
quelle
Wenn Sie nur das Datum in einem bestimmten Format anzeigen möchten, rufen Sie einfach an:
Es ergibt sich folgendes Format:
quelle
Dies wird
dd/MM/yyyy
in Ihrer Ansicht im Format angezeigtIm Hinblick auf:
anstatt
DisplayFor
diesen Code zu verwendenAußerdem wird geprüft, ob der Wert in der Datumsspalte null ist. Wenn true, wird Datum leer oder das tatsächlich formatierte Datum in der Spalte angezeigt.
Hoffnung hilft jemandem.
quelle
quelle
In MVC5 würde ich verwenden, wenn Ihr Modell das Datum / die Uhrzeit ist
Oder wenn Ihr Modell die Eigenschaft datetime enthält
Hier ist die offizielle Bedeutung der Formate:
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
quelle
Nur Datei anzeigen So anpassen. Sie können dies versuchen.
item.transdate
Es sind IhreDateTime
Typdaten.quelle