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
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.
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
Vous devez annoter le type en tant que Date
[DataType(DataType.Date)]
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; }
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>