2013-05-22 13 views
19

Mam właściwość w moim modelu widoku w następujący sposób:Dlaczego funkcja DisplayFormat DataFormatString nie działa?

[Editable(false)] 
[Display(Name = "Date")] 
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)] 
public DateTime MovementDate { get; set; } 

Jednak markup

<td> 
    @Html.DisplayFor(modelItem => item.MovementDate) 
</td> 

świadczy wartość daty jako 2013/05/15 12:00:00 AM.

Co robię źle? Mój model:

public class WithDateModel 
{ 
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}")] 
    public DateTime TheDate { get; set; } 
    public WithDateModel() 
    { 
     TheDate = DateTime.Now; 
    } 
} 

mój widok:

@model ParkPay.WebTests.Models.WithDateModel 
@Html.DisplayFor(m => m.TheDate) 
@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

Co zostanie wygenerowana:

2013/05/25 02:23:37 AM 
+0

Czy tylko chcesz wyświetlić data? Struktura 'DateTime' jest wyrażeniem daty i czasu. – MattSull

+2

@ MattSull87 Mam świadomość, że struktura DateTime zawiera czasy. Właśnie dlatego próbuję użyć właściwości 'DataFormatString', aby wykluczyć czas ze sformatowanej daty. – ProfK

+0

Czy rozwiązałeś problem? Odpowiedź jakiejkolwiek pomocy? – MattSull

Odpowiedz

3

Dlaczego używasz ApplyFormatInEditMode Jeśli ustawiono [Editable(false)]? Wszystko, co robi ApplyFormatInEditMode, to formatowanie daty, jeśli masz ją w polu tekstowym lub czymś do edycji, czego prawdopodobnie nie zrobisz z powodu wspomnianej powyżej.

I był w stanie uzyskać datę, aby wyświetlić poprawnie przy użyciu następujących:

[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}")] 
public DateTime Date 
{ 
    get 
    { 
     return DateTime.Now; 
    } 
    set 
    { 
     Date = DateTime.Now; 
    } 
} 

aw widzenia (co powoduje wyjście):

@Html.DisplayFor(x => x.Date)  // 2013/05/23 
<br /> 
@Model.Date       // 23/05/2013 09:57:56 
<br /> 
@Html.DisplayFor(x => Model.Date) // 2013/05/23 

Nadzieja to pomaga.

+3

O wiele łatwiej jest mieć niepotrzebne 'ApplyFormatInEditMode' na każdym atrybucie 'DisplayFormat' niż dodawać lub usuwać, jeśli dodaję lub usuwam '[Editable (false)]' atrybut – ProfK

31

Jeśli nie możesz uruchomić tego modelu, możesz go wypróbować w widoku.

@Html.TextBoxFor(m => m.ValidFrom, "{0:dd/MM/yyyy}", new {maxlength = 10})

+19

To rozwiązanie działało dla mnie.Również na marginesie, DisplayFormat jest ignorowany w "TextBoxFor" – Frederik

+8

DisplayFormat jest ignorowany w "TextBoxFor" - Muszę uwielbiać konsystencję microsoft tutaj :( –

+2

@AdamTolley zgadza się, całkowicie nieintuicyjny – Filip

5

Ponieważ chcesz wykluczyć czas tylko dostać Data: w Model: -

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/MM/dd}"] 
    public DateTime TheDate { get; set; } 

Na Wyświetleń: -

@Html.DisplayFor(model=> model.TheDate) 
    @Html.JQueryUI().DatepickerFor(model => model.TheDate) 

samouczka z poniższy link może ci pomóc. To działa dla mnie.

http://ilyasmamunbd.blogspot.com/2014/02/jquery-ui-datepicker-popup-calendar.html

+0

Ustawienie 'ApplyFormatInEditMode' zrobiło to za mnie. –

0

To praca dla mnie:

W modelu

using System.ComponentModel.DataAnnotations; 

namespace Athlete.Models 
{ 
    public class Foo 
    { 

     [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")] 
     public DateTime SignDate 
     { 
      get; 
      set; 
     } 
    } 
} 

I w widoku:

<td style="text-align:left;">@Html.DisplayFor(modelItem => item.SignDate)</td> 
0

potrzebujesz nazwy var w Imieniu reklamowej :
[Di splay (Name = "MovementDate")] public DateTime MovementDate {get; zestaw; }

[Editable(false)] 
[Display(Name = "MovementDate")] 
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)] 
public DateTime MovementDate { get; set; } 
0

W moim przypadku kolega miał zdefiniowany szablon globalny wyświetlacza (aka ~\Views\Shared\DisplayTemplates\DateTime.cshtml), że nie zdawali sobie sprawy miały pierwszeństwo nad moją [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")] na mojej własności modelu.

Rozwiązaniem było przenieść ciąg formatu do nowego wspólnego szablonu, więc atrybut zmienia się na:

// see ~\Views\Shared\DisplayTemplates\DateMyFormat.cshtml for formatting 
[UIHint("DateMyFormat")] 
public DateTime MovementDate { get; set; } 
0

Trzeba opisywanie typem Data

[DataType(DataType.Date)] 
Powiązane problemy