Jeśli moja klasa modelu ma właściwość typu, DateTime
jak mogę ją renderować w określonym formacie - na przykład w formacie, który ToLongDateString()
zwraca?
Próbowałem tego ...
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
... co zgłasza wyjątek, ponieważ wyrażenie musi wskazywać właściwość lub pole. I to...
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
... co nie zgłasza wyjątku, ale renderowane wyjście jest puste (chociaż val
zawiera oczekiwaną wartość, jak mogłem zobaczyć w debugerze).
Dzięki za wskazówki z góry!
Edytować
ToLongDateString
to tylko przykład. Zamiast tego chcę użyć ToLongDateString
niestandardowej metody rozszerzenia DateTime
i 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 "";
}
Więc myślę, że nie mogę użyć DisplayFormat
atrybutu i DataFormatString
parametru we właściwościach ViewModel.
źródło
Możesz ozdobić swoją właściwość modelu widoku
[DisplayFormat]
atrybutem:i Twoim zdaniem:
lub do wyświetlania wartości,
Inną możliwością, której nie polecam, jest użycie słabo wpisanego helpera:
źródło
DateTime
(ToLongDateString był tylko przykładem), więc jest mało prawdopodobne, żebym mógł go użyćDataFormatString
.@Html.DisplayFor(x => x.MyDateTime)
. @NickLarsen to powód, dla którego należy używać modeli widoku. W moim przykładzie dekoruję model widoku tym atrybutem i widok jest już powiązany z danym widokiem, to jest jego cel.Proste, sformatowane dane wyjściowe wewnątrz modelu
lub w pętli foreach
źródło
string.Format
Używam następującego podejścia do formatu wbudowanego i wyświetlam właściwość daty z modelu.
W przeciwnym razie, wypełniając TextBox lub Editor, możesz zrobić tak, jak sugerował @Darin, ozdobić atrybut
[DisplayFormat]
atrybutem.źródło
Jeśli wszystkie
DateTime
typy są renderowane w ten sam sposób, możesz użyć niestandardowegoDateTime
szablonu wyświetlania.W folderze Widoki utwórz folder o nazwie „DisplayTemplates” albo w folderze widoków specyficznych dla kontrolera, albo w folderze „Shared” (działają one podobnie do częściowych).
Wewnątrz utwórz plik o nazwie,
DateTime.cshtml
który przyjmujeDateTime
jako@model
kod i kod, w jaki sposób chcesz renderować swoją datę:Teraz możesz po prostu użyć tego w swoich widokach i powinno działać:
Tak długo, jak będziesz przestrzegać konwencji dodawania go do folderu „DisplayTemplates” i nazwania pliku tak, aby pasował do wyświetlanego typu, MVC automatycznie użyje tego do wyświetlenia twoich wartości. Działa to również w przypadku edycji scenariuszy przy użyciu „EditorTemplates”.
Oto więcej informacji na temat szablonów .
źródło
DateTime
. Jednak mam kilka właściwości DateTime dopuszczających wartość null. Próbowałem utworzyć drugi plik wDisplayTemplates
folderze, o nazwieNullableDateTime.cshtml
i wewnątrz:@using MyHelpers @model System.DateTime? @Model.MyCustomExtension()
OtoMyCustomExtension
metoda rozszerzenia naDateTime?
. Jednak pojawia się wyjątek, gdy DateTime? pole jest naprawdę puste, co oznacza, że słownik wymaga elementu modelu,DateTime
który nie jest pusty. Czy istnieje sposób na zdefiniowanie DisplayTemplate dla DateTime dopuszczającej wartość null?NullableDateTime.cshtml
trzymałbym się i zastosował podejście, które zasugerował @NickLarsen i którego używa@Html.DisplayFor(m => m.MyDateTime, "NullableDateTime")
.Preferuję zachowanie szczegółów formatowania w widoku, a nie w modelu widoku. Więc w MVC4 / Razor:
odniesienie do formatu datetime: http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx
Następnie mam powiązany z nim Datepicker JQuery, który umieszcza datę w innym formacie ... doh!
Wygląda na to, że muszę ustawić format DatePicker na to samo formatowanie.
Więc przechowuję
System.Globalization
formatowanie w atrybucie data- * i zbieram je podczas konfigurowaniaA oto kiepska część: formaty .net i datepicker nie pasują, więc potrzebne jest hakowanie:
to trochę słabe, ale powinno obejmować wiele przypadków.
źródło
pracuje dla mnie
źródło
Miałem ostatnio ten sam problem.
Odkryłem, że po prostu zdefiniowanie DataType jako daty w modelu działa również (przy użyciu podejścia Code First)
źródło
możesz to zrobić
@item.Date.Value.Tostring("dd-MMM-yy");
źródło
jeśli chcę tylko wyświetlić datę w krótkim formacie, po prostu używam @ Model.date.ToShortDateString () i wyświetla datę w
źródło
Jeśli chcesz tylko wyświetlić datę w określonym formacie, zadzwoń:
Spowoduje to następujący format,
źródło
będzie to wyświetlane w
dd/MM/yyyy
formacie w Twoim widokuZ uwagi:
zamiast
DisplayFor
używać tego kodusprawdza również, czy wartość jest pusta w kolumnie daty, jeśli prawda, wyświetli Date is Empty lub rzeczywistą sformatowaną datę z kolumny.
Nadzieja pomaga komuś.
źródło
źródło
W MVC5 użyłbym, jeśli twój model to data i godzina
Lub jeśli twój model zawiera właściwość datetime
Oto oficjalne znaczenie formatów:
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
źródło
Tylko View File Adjust w ten sposób. Możesz tego spróbować.
item.transdate
to jest twójDateTime
typ danych.źródło