Mam następujący kod maszynki do golenia, który chcę mieć mm/dd/yyyy
format daty:
Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
Wypróbowałem wiele różnych podejść, ale żadne z nich nie działa w mojej sytuacji
moja AuditDate to DateTime?
typ
Próbowałem czegoś takiego i otrzymałem ten błąd:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Informacje dodatkowe: szablonów można używać tylko z dostępem do pól, dostępem do właściwości, indeksem tablicy jednowymiarowej lub niestandardowymi wyrażeniami indeksatora z jednym parametrem.
Próbowałem tego:
@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
Brak przeciążenia metody „ToString” przyjmuje 1 argument
źródło
No overload for method 'ToString' takes 1 arguments
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
ApplyFormatInEditMode = true
do nieruchomości:[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
. To powinno być oczywiste, ale kiedy nie ma czasu na zmarnowanie-skopiuj-wklej, podpowiedź Intellisense może przejść przez nos, tak jak ja :)Jeśli po prostu wyprowadzasz wartość tej właściwości modelu, nie potrzebujesz
DisplayFor
pomocnika html, po prostu wywołaj go bezpośrednio z odpowiednim formatowaniem ciągu .Audit Date: @Model.AuditDate.Value.ToString("d")
Powinien wyjść
Audit Date: 1/21/2015
Wreszcie data audytu może być zerowa, dlatego przed podjęciem próby sformatowania wartości zerowej należy wykonać sprawdzenie warunkowe.
@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}
Wygooglowanie otrzymywanego błędu zapewnia tę odpowiedź , która pokazuje, że błąd wynika z użycia słowa Model w pomocnikach HTML. Na przykład użycie
@Html.DisplayFor(Model=>Model.someProperty)
. Zmień je, aby użyć czegoś innego niżModel
na przykład:@Html.DisplayFor(x=>x.someProperty)
lub zmień wielkąM
literę na małą literęm
w tych pomocnikach.źródło
@Model.AuditDate.Value.ToString("d")
Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
Html.DisplayFor
pomocniku. Nie rób tego. Czy na pewno zgłasza błąd w tej linii, a nie w jakiejś innej właściwości, na której próbujesz użyćDisplayFor
pomocnika?@Model...
, otrzymuję ten błąd: `` Model '' jest w konflikcie z deklaracją System.Web.Mvc.WebViewPage <TModel> .Model 'Używam tej zmiany w moim kodzie:
stary kod:
<td> @Html.DisplayFor(modelItem => item.dataakt) </td>
Nowy :
<td> @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy") </td>
źródło
Odpowiedź @ ChrisPratt na temat korzystania z szablonu wyświetlania jest błędna. Prawidłowy kod, aby to działało, to:
@model DateTime? @if (Model.HasValue) { @Convert.ToDateTime(Model).ToString("MM/dd/yyyy") }
Dzieje się tak, ponieważ
.ToString()
forNullable<DateTime>
nie akceptujeFormat
parametru .źródło
Zaimplementowałem podobną rzecz w ten sposób:
2. Daj zerowy kontur i zerowe obramowanie do TextBox w css.
.my-style { outline: none; border: none; }
I ...... Gotowe :)
źródło
Dla mnie to wystarczyło
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { set; get; }
źródło
Możesz użyć atrybutu [ DisplayFormat ] w swoim modelu widoku, ponieważ chcesz zastosować ten format do całego projektu.
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] public Nullable<System.DateTime> Date { get; set; }
źródło
Po pewnym kopania i skończyło się na ustawienie
Thread
„s CurrentCulture wartość mają CultureInfo («en-us») w sposobie działania kontrolera:Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Oto kilka innych opcji jeśli chcesz mieć to ustawienie w każdym widoku.
O
CurrentCulture
wartości nieruchomości:Źródło: MSDN CurrentCulture
Uwaga: poprzednie
CurrentCulture
ustawienie właściwości jest prawdopodobnie opcjonalne, jeśli kontroler jest już uruchomiony zCultureInfo("en-US")
lub podobnym, gdzie jest format daty"MM/dd/yyyy"
.Po ustawieniu
CurrentCulture
właściwości dodaj blok kodu, aby przekonwertować datę na"M/d/yyyy"
format w widoku:@{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @shortDateLocalFormat
Powyżej
@shortDateLocalFormat
zmienna jest sformatowana za pomocąToString("M/d/yyyy")
dzieł. JeśliToString("MM/dd/yyyy")
jest używane, tak jak zrobiłem to na początku, w końcu masz zerowy problem . Działa też polecany przez Tommy'egoToString("d")
. Właściwie"d"
oznacza „Wzorzec daty krótkiej” i może być również używany z różnymi formatami kulturowymi / językowymi.Myślę, że powyższy blok kodu można również zastąpić jakąś fajną metodą pomocniczą lub podobną.
Na przykład
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat }
może być używany z tym wywołaniem pomocnika
@DateFormatter(Model.AuditDate)
Aktualizacja , dowiedziałem się, że istnieje alternatywny sposób zrobienia tego samego, gdy używana jest metoda DateTime.ToString (String, IFormatProvider) . Przy zastosowaniu tej metody to nie ma potrzeby korzystania z
Thread
„sCurrentCulture
nieruchomości. WartośćCultureInfo("en-US")
jest przekazywana jako drugi argument -> IFormatProvider doDateTime.ToString(String, IFormatProvider)
metody.Zmodyfikowana metoda pomocnicza:
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat }
.NET Fiddle
źródło
Może po prostu spróbuj
@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)
możesz również użyć wielu typów formatów ciągów, takich jak .ToString ("dd MMM, yyyy") .ToString ("d") itp.
źródło
@model
go użył , nie rozpoznajeM
podczas używania na stronie HTML, małe literym
podczas deklarowania.No overload for method 'ToString' takes 1 arguments
narzekam, kiedy używamToString("mm/dd/yyyy")
W widoku Zamień to:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Z:
@if(@Model.AuditDate.Value != null){@Model.AuditDate.Value.ToString("dd/MM/yyyy")} else {@Html.DisplayFor(Model => Model.AuditDate)}
Objaśnienie: Jeśli wartość AuditDate nie jest pusta, data zostanie sformatowana na dd / MM / rrrr, w przeciwnym razie pozostaw ją taką, jaka jest, ponieważ nie ma wartości.
źródło
Miałem podobny problem z kontrolerem i oto, co zadziałało:
model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : ""
„DateSigned” to wartość z mojego modelu. Linia czyta, jeśli wartość modelu ma wartość, sformatuj ją, w przeciwnym razie nic nie pokaż.
Mam nadzieję, że to pomoże
źródło
To najlepszy sposób na uzyskanie prostego ciągu daty:
@DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()
źródło
HtmlString
wyjściowe przezDisplayFor
, konwertuje je na aString
, analizuje je jako aDateTime
, a następnie formatuje jako plikString
. Moim zdaniem niepotrzebnie skomplikowane.Możesz użyć Convert
<td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td>
źródło
Zobacz tę odpowiedź dotyczącą
No overload for method 'ToString' takes 1 arguments
błędu.Nie można sformatować DateTime dopuszczającej wartość null - należy użyć właściwości DateTime.Value.
@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty
źródło
'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'