Si j'ai dans ma classe de modèle une propriété de type, DateTime
comment puis-je la rendre dans un format spécifique - par exemple dans le format qui ToLongDateString()
renvoie?
J'ai essayé ça ...
@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())
... qui lève une exception car l'expression doit pointer vers une propriété ou un champ. Et ça...
@{var val = item.MyDateTime.ToLongDateString();
Html.DisplayFor(modelItem => val);
}
... qui ne lève pas d'exception, mais la sortie rendue est vide (bien qu'elle val
contienne la valeur attendue, comme j'ai pu le voir dans le débogueur).
Merci pour les conseils à l'avance!
Éditer
ToLongDateString
n'est qu'un exemple. Ce que je souhaite utiliser à la place, ToLongDateString
c'est une méthode d'extension personnalisée de DateTime
et DateTime?
:
public static string FormatDateTimeHideMidNight(this DateTime dateTime)
{
if (dateTime.TimeOfDay == TimeSpan.Zero)
return dateTime.ToString("d");
else
return dateTime.ToString("g");
}
public static string FormatDateTimeHideMidNight(this DateTime? dateTime)
{
if (dateTime.HasValue)
return dateTime.Value.FormatDateTimeHideMidNight();
else
return "";
}
Donc, je pense que je ne peux pas utiliser l' DisplayFormat
attribut et le DataFormatString
paramètre sur les propriétés ViewModel.
la source
Vous pouvez décorer votre propriété de modèle de vue avec l'
[DisplayFormat]
attribut:et à votre avis:
ou, pour afficher la valeur,
Une autre possibilité, que je ne recommande pas, est d'utiliser un assistant faiblement typé:
la source
DateTime
(ToLongDateString n'était qu'un exemple), il est donc peu probable que je puisse utiliserDataFormatString
.@Html.DisplayFor(x => x.MyDateTime)
. @NickLarsen c'est la raison pour laquelle les modèles de vue doivent être utilisés. Dans mon exemple, je décore le modèle de vue avec cet attribut et une vue est déjà liée à une vue donnée, c'est son but.Sortie formatée simple à l'intérieur du modèle
ou dans la boucle foreach
la source
string.Format
J'utilise l'approche suivante pour le format en ligne et affiche une propriété de date à partir du modèle.
Sinon, lors du remplissage d'une zone de texte ou d'un éditeur, vous pouvez faire comme @Darin suggéré, décorer l'attribut avec un
[DisplayFormat]
attribut.la source
Si tous vos
DateTime
types sont rendus de la même manière, vous pouvez utiliser unDateTime
modèle d'affichage personnalisé .Dans votre dossier Views, créez un dossier nommé «DisplayTemplates» soit sous le dossier de vues spécifiques de votre contrôleur, soit sous le dossier «Shared» (ceux-ci fonctionnent comme des partiels).
À l'intérieur, créez un fichier nommé
DateTime.cshtml
qui prendDateTime
comme@model
code et comment vous voulez rendre votre date:Maintenant, vous pouvez simplement l'utiliser dans vos vues et cela devrait fonctionner:
Tant que vous suivez la convention de l'ajouter au dossier "DisplayTemplates" et de nommer le fichier pour qu'il corresponde au type que vous affichez, MVC l'utilisera automatiquement pour afficher vos valeurs. Cela fonctionne également pour l'édition de scénarios à l'aide de "EditorTemplates".
Voici quelques informations supplémentaires sur les modèles .
la source
DateTime
. Cependant, j'ai quelques propriétés DateTime nullables. J'ai essayé de créer un deuxième fichier dans leDisplayTemplates
dossier, appeléNullableDateTime.cshtml
et dans:@using MyHelpers @model System.DateTime? @Model.MyCustomExtension()
VoiciMyCustomExtension
une méthode d'extension surDateTime?
. Cependant, il obtient une exception quand un DateTime? field est vraiment nul, ce qui me dit que le dictionnaire nécessite un élément de modèle de typeDateTime
qui n'est pas nul. Existe-t-il un moyen de définir un DisplayTemplate pour un DateTime nullable?NullableDateTime.cshtml
et utiliserais l'approche suggérée et utilisée par @NickLarsen@Html.DisplayFor(m => m.MyDateTime, "NullableDateTime")
.Ma préférence est de conserver les détails de mise en forme avec la vue et non avec le modèle de vue. Donc dans MVC4 / Razor:
référence au format datetime: http://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.71).aspx
Ensuite, j'ai un datepicker JQuery lié à lui, et qui met la date dans un format différent ... doh!
Il semble que je doive définir le format du sélecteur de date sur le même format.
Je stocke donc le
System.Globalization
formatage dans un attribut data- * et je le collecte lors de la configuration duEt voici la partie désagréable: les formats de .net et de datepicker ne correspondent pas, donc le piratage est nécessaire:
c'est un peu faible, mais devrait couvrir de nombreux cas.
la source
travaille pour moi
la source
J'ai eu le même problème récemment.
J'ai découvert que la simple définition de DataType comme Date dans le modèle fonctionne également (en utilisant l'approche Code First)
la source
tu peux faire comme ça
@item.Date.Value.Tostring("dd-MMM-yy");
la source
si je veux juste afficher la date au format court, j'utilise simplement @ Model.date.ToShortDateString () et il imprime la date dans
la source
Si tout ce que vous voulez faire est d'afficher la date avec un format spécifique, appelez simplement:
Il en résultera le format suivant,
la source
cela s'affichera au
dd/MM/yyyy
format dans votre vueEn vue:
au lieu d'
DisplayFor
utiliser ce codeil vérifie également si la valeur est nulle dans la colonne de date, si elle est vraie, elle affichera la date est vide ou la date mise en forme réelle de la colonne.
L'espoir aide quelqu'un.
la source
la source
Dans MVC5, j'utiliserais, si votre modèle est le datetime
Ou si votre modèle contient la propriété du datetime
Voici la signification officielle des formats:
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
la source
Seulement voir le fichier Ajuster comme ça. Vous pouvez essayer ceci.
item.transdate
ce sont vosDateTime
données de type.la source