web-dev-qa-db-fra.com

Pourquoi DisplayFormat DataFormatString ne fonctionne-t-il pas?

J'ai une propriété dans mon modèle de vue comme suit:

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

Pourtant le balisage

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

affiche la date comme 2013/05/15 12:00:00 AM.

Qu'est-ce que je fais mal? Mon modele:

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

Mon avis:

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

Ce qui est rendu:

2013/05/25 02:23:37 AM
25
ProfK

Pourquoi utilisez-vous ApplyFormatInEditMode si vous avez défini [Editable(false)]? Tout ce que ApplyFormatInEditMode fait est de formater la date si vous l'avez dans une zone de texte ou quelque chose à modifier, ce que vous ne pourrez probablement pas en raison de ce qui précède.

J'ai pu obtenir la date d'affichage correct en utilisant les éléments suivants:

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

et dans la vue (avec le résultat obtenu):

@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

J'espère que cela t'aides.

7
MattSull

Depuis que vous voulez exclure le temps pour obtenir uniquement la date: Sur le modèle: -

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

Aux vues: -

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

Le tutoriel du lien suivant peut vous aider. Cela fonctionne pour moi.

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

5

Vous devez annoter le type en tant que Date

[DataType(DataType.Date)]
1
Prakash G. R.

Dans mon cas, un coéquipier avait défini un modèle d'affichage global (aussi appelé ~\Views\Shared\DisplayTemplates\DateTime.cshtml) que je n'avais pas réalisé prioritaire sur ma [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")] sur la propriété de modèle.

La solution a été de déplacer ma chaîne de formatage vers un nouveau modèle partagé, afin que l'attribut devienne:

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

Ce travail pour moi:

Dans le modèle:

using System.ComponentModel.DataAnnotations;

namespace Athlete.Models
{
    public class Foo
    {

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

Et dans la vue:

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