2013-05-22 8 views
19

Ho un immobile nel mio modello vista come segue:Perché DisplayFormat DataFormatString non funziona?

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

Eppure il markup

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

rende il valore della data come 2013/05/15 12:00:00 AM.

Cosa sto sbagliando? Il mio modello:

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

mio punto di vista:

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

Ciò che viene resa:

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

Vuoi visualizzare solo l'appuntamento? La struttura 'DateTime' è un'espressione di data e ora. – MattSull

+2

@ MattSull87 Sono ben consapevole che la struttura DateTime include volte. Questo è esattamente il motivo per cui sto cercando di usare la proprietà 'DataFormatString' per escludere il tempo dalla data formattata. – ProfK

+0

Hai risolto il problema? Risposta di qualsiasi assistenza? – MattSull

risposta

3

Perché stai usando ApplyFormatInEditMode se è stata impostata [Editable(false)]? Tutto lo ApplyFormatInEditMode fa è formattare la data se lo si ha in una casella di testo o qualcosa per la modifica, che probabilmente non sarà a causa di quanto sopra.

sono stato in grado di ottenere la data per visualizzare correttamente utilizzando il seguente:

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

e nella vista (con conseguente uscita):

@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 

Spero che questo aiuti.

+3

È molto più semplice avere un 'ApplyFormatInEditMode' superfluo su ciascun attributo 'DisplayFormat' piuttosto che doverlo aggiungere o rimuovere se aggiungo o rimuovo Attributo '[Modificabile (falso)]. – ProfK

31

Se non riesci a farlo funzionare sul modello, puoi provarlo sulla vista.

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

+19

Questa soluzione ha funzionato per me. Inoltre, come nota a margine, DisplayFormat viene ignorato in" TextBoxFor ". – Frederik

+8

DisplayFormat viene ignorato in" TextBoxFor "- Devi amare la coerenza di Microsoft qui :( –

+2

@AdamTolley è d'accordo, completamente anti-intuitivo – Filip

5

poiché si desidera escludere il tempo per ottenere solo Data: A Modello: -

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

Al Visualizzazioni: -

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

Il tutorial del il seguente link può aiutarti. Funziona per me.

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

+0

L'impostazione 'ApplyFormatInEditMode' lo ha fatto per me. –

0

questo lavoro per me:

Nel modello:

using System.ComponentModel.DataAnnotations; 

namespace Athlete.Models 
{ 
    public class Foo 
    { 

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

E nella vista:

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

è necessario il nome var nel Nome visualizzato :
[Di splay (Name = "MovementDate")]
DateTime pubblico MovementDate {get; impostato; }

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

Nel mio caso un compagno di squadra aveva definito un modello di visualizzazione globale (aka ~\Views\Shared\DisplayTemplates\DateTime.cshtml) che non mi rendevo conto aveva la precedenza sulla mia [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")] sulla mia proprietà modello.

La soluzione era quella di spostare la mia stringa di formato di nuovo modello condiviso, quindi l'attributo cambia a:

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

Bisogna annotare il tipo Data

[DataType(DataType.Date)]