Problem
biegnę przez tutorials for ASP.NET MVC 4 (ale myślę, że byłoby to również zastosowanie do MVC 5), w której stworzenie strony internetowej dla filmu sklep.ASP.NET MVC Zastosuj różne DisplayFormat dla edycji i wyświetlania trybów
Model filmu ma właściwość ReleaseDate typu DateTime. Generalnie ta data będzie wyświetlana więcej niż jest edytowana, więc zastosowałem następujące atrybuty, aby ją ładnie renderować.
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime ReleaseDate { get; set; }
Kiedy pogląd, że wyświetlacze data ta czyni to za pomocą:
@Html.DisplayFor(model => model.ReleaseDate)
ona wyświetlona ładnie sformatowany, jak można się spodziewać:
Ale kiedy widok, który edytuje tej dacie czyni go za pomocą:
@Html.EditorFor(model => model.ReleaseDate)
wyświetla piękny datę HTML5 kompletacji, ale nie wypełnia wartości ponieważ data jest w (komunikat o błędzie niewłaściwy format jest The specified value '11/01/1989 00:00:00' does not conform to the required format, 'yyyy-MM-dd'.
Jest to problem, ponieważ jeśli użytkownik chce edytować wpis , data z kontroli nigdy nie zostanie ustawiona, więc użytkownik nie będzie wiedział, jaka jest poprzednia/aktualna wartość.
pół sposób Rozwiązanie
Roztwór Znalazłem od przeczytaniu innych podobnych pytań jest ustawienie DisplayFormat w modelu do yyyy-MM-dd i sprawiają, ma zastosowanie do kontroli edycyjnych :
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; }
To działa, w tym, że auto zapełnia wartość na dzień HTML5 kompletacji podczas edycji (za pomocą @Html.EditorFor())
:
Ale Utknąłem z brzydkich terminach formacie ISO na kiedy jestem wyświetlania (przy użyciu `@ Html.DisplayFor()):
prawdziwe pytanie
Moje prawdziwe pytanie brzmi: czy mogę mieć różne formaty wyświetlania dla normalnego trybu wyświetlania i edycji, ustawione w modelu?
- Nie chcę używać pola tekstowego do edycji daty - chcę użyć wyboru daty HTML5; jest o wiele ładniejszy niż przy użyciu pola tekstowego.
- Nie chcę również zmieniać wszystkich widoków, które wyświetlają datę, aby bezpośrednio pobrać właściwość z modelu i sformatować ją za pomocą niestandardowego formatowania, która neguje punkt atrybutu DisplayFormat.(Chcę użyć
@Html.DisplayFor
do wyświetlania i@Html.EditorFor
do edycji)
Mam nadzieję, że wszystko ma sens - Jestem nowym ASP.NET, więc nie do końca znają te kontrole i atrybutów.
Edit
Co staram się osiągnąć coś takiego:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] // use this format for edit controls
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = false)] // use this format for display controls
public DateTime ReleaseDate { get; set; }
ale nie można mieć dwa atrybuty formatu wyświetlania dla jednej nieruchomości.
Czy * nie * użyć Displayfor? Możesz także użyć @ Model.ReleaseDate.ToString() z ciągiem formatu pasującym do wyjścia, które chcesz. –
@TiesonT. Nie muszę ... jest po prostu tak miło i schludnie. Moim głównym problemem jest to, że używając @ model.ReleaseDate.ToString() z ciągiem formatującym jest to, że ten ciąg formatu musi być powielany wszędzie, gdzie wyświetlana jest data wydania, która ma być o wiele więcej miejsc niż jest edytowana. Właśnie widziałem Twój komentarz w odpowiedzi Backs. – Erresen