J'ai le code de rasoir suivant que je veux avoir au mm/dd/yyyy
format de date:
Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
J'ai essayé plusieurs approches différentes mais aucune de ces approches ne fonctionne dans ma situation
mon AuditDate est un DateTime?
type
J'ai essayé quelque chose comme ça et j'ai cette erreur:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Informations supplémentaires: Les modèles ne peuvent être utilisés qu'avec l'accès aux champs, l'accès aux propriétés, l'index de tableau à une dimension ou les expressions d'indexation personnalisées à paramètre unique.
J'ai essayé ceci:
@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
Aucune surcharge pour la méthode 'ToString' prend 1 argument
la source
No overload for method 'ToString' takes 1 arguments
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
ApplyFormatInEditMode = true
à la propriété:[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
. Cela devrait être évident, mais quand vous n'avez pas de temps à perdre, copiez-collez cet indice d'intellisense pourrait passer votre nez comme le mien :)Si vous sortez simplement la valeur de cette propriété de modèle, vous n'avez pas besoin de l'
DisplayFor
assistant html, appelez-le simplement directement avec le format de chaîne approprié .Audit Date: @Model.AuditDate.Value.ToString("d")
Devrait sortir
Audit Date: 1/21/2015
Enfin, votre date d'audit peut être nulle, vous devez donc effectuer la vérification conditionnelle avant d'essayer de mettre en forme une valeur Nullable.
@if (item.AuditDate!= null) { @Model.AuditDate.Value.ToString("d")}
Googler l'erreur que vous obtenez fournit cette réponse , qui montre que l'erreur provient de l'utilisation du mot Modèle dans vos helpers Html. Par exemple, en utilisant
@Html.DisplayFor(Model=>Model.someProperty)
. Modifiez-les pour utiliser autre chose queModel
, par exemple:@Html.DisplayFor(x=>x.someProperty)
ou changez la majusculeM
en minusculem
dans ces helpers.la source
@Model.AuditDate.Value.ToString("d")
Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
Html.DisplayFor
aide. Ne fais pas ça. De plus, êtes-vous sûr que cela lance l'erreur sur cette ligne et non sur une autre propriété sur laquelle vous essayez d'utiliser l'DisplayFor
assistant?@Model...
j'obtiens cette erreur: 'Model' est en conflit avec la déclaration System.Web.Mvc.WebViewPage <TModel> .Model 'J'utilise ce changement dans mon code:
ancien code:
<td> @Html.DisplayFor(modelItem => item.dataakt) </td>
Nouveau :
<td> @Convert.ToDateTime(item.dataakt).ToString("dd/MM/yyyy") </td>
la source
La réponse de @ ChrisPratt sur l'utilisation du modèle d'affichage est fausse. Le code correct pour le faire fonctionner est:
@model DateTime? @if (Model.HasValue) { @Convert.ToDateTime(Model).ToString("MM/dd/yyyy") }
C'est parce que
.ToString()
forNullable<DateTime>
n'accepte pas leFormat
paramètre .la source
J'ai implémenté la même chose de cette façon:
2. Donnez un contour zéro et une bordure zéro à TextBox en css.
.my-style { outline: none; border: none; }
Et ... c'est fait :)
la source
Pour moi, il suffisait d'utiliser
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { set; get; }
la source
Vous pouvez utiliser l' attribut [ DisplayFormat ] sur votre modèle de vue car vous souhaitez appliquer ce format à l'ensemble du projet.
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] public Nullable<System.DateTime> Date { get; set; }
la source
Après quelques fouilles et j'ai fini par définir
Thread
la valeur CurrentCulture pour avoir CultureInfo ("en-US") dans la méthode d'action du contrôleur:Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Voici quelques autres options si vous souhaitez avoir ce paramètre sur chaque vue.
À propos de la
CurrentCulture
valeur de la propriété:Source: MSDN CurrentCulture
Remarque: Le
CurrentCulture
paramètre de propriété précédent est probablement facultatif si le contrôleur est déjà en cours d'exécution avecCultureInfo("en-US")
ou similaire où le format de date est"MM/dd/yyyy"
.Après avoir défini la
CurrentCulture
propriété, ajoutez un bloc de code pour convertir la date au"M/d/yyyy"
format dans la vue:@{ //code block var shortDateLocalFormat = ""; if (Model.AuditDate.HasValue) { shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy"); //alternative way below //shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("d"); } } @shortDateLocalFormat
Au-dessus, la
@shortDateLocalFormat
variable est formatée avec desToString("M/d/yyyy")
œuvres. SiToString("MM/dd/yyyy")
est utilisé, comme je l'ai fait d'abord, vous finissez par avoir un problème majeur . Comme recommandé par TommyToString("d")
fonctionne également. En fait, cela"d"
signifie «modèle de date courte» et peut également être utilisé avec différents formats de culture / langue.Je suppose que le bloc de code ci-dessus peut également être remplacé par une méthode d'assistance cool ou similaire.
Par exemple
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy"); } @shortDateLocalFormat }
peut être utilisé avec cet appel d'assistance
@DateFormatter(Model.AuditDate)
Mise à jour , j'ai découvert qu'il existe un autre moyen de faire la même chose lorsque la méthode DateTime.ToString (String, IFormatProvider) est utilisée. Lorsque cette méthode est utilisée, il n'est pas nécessaire d'utiliser
Thread
laCurrentCulture
propriété de. LeCultureInfo("en-US")
est passé comme deuxième argument -> IFormatProvider à laDateTime.ToString(String, IFormatProvider)
méthode.Méthode d'assistance modifiée:
@helper DateFormatter(object date) { var shortDateLocalFormat = ""; if (date != null) { shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US")); } @shortDateLocalFormat }
.NET Fiddle
la source
Essayez peut-être simplement
@(Model.AuditDate.HasValue ? Model.AuditDate.ToString("mm/dd/yyyy") : String.Empty)
vous pouvez également utiliser de nombreux types de format de chaîne comme .ToString ("jj MMM, aaaa") .ToString ("d") etc
la source
@model
il ne reconnaît pasM
lors de l'utilisation dans la page HTML, en minusculesm
lors de la déclaration.No overload for method 'ToString' takes 1 arguments
se plaindre quand j'utiliseToString("mm/dd/yyyy")
Dans la vue Remplacez ceci:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Avec:
@if(@Model.AuditDate.Value != null){@Model.AuditDate.Value.ToString("dd/MM/yyyy")} else {@Html.DisplayFor(Model => Model.AuditDate)}
Explication: Si la valeur AuditDate n'est pas nulle, elle formatera la date en jj / MM / aaaa, sinon laissez-la telle quelle car elle n'a pas de valeur.
la source
J'ai eu un problème similaire sur mon contrôleur et voici ce qui a fonctionné pour moi:
model.DateSigned.HasValue ? model.DateSigned.Value.ToString("MM/dd/yyyy") : ""
"DateSigned" est la valeur de mon modèle. La ligne lit, si la valeur du modèle a une valeur, formatez la valeur, sinon n'affichez rien.
J'espère que ça t'as aidé
la source
C'est le meilleur moyen d'obtenir une chaîne de date simple:
@DateTime.Parse(Html.DisplayFor(Model => Model.AuditDate).ToString()).ToShortDateString()
la source
HtmlString
sortie parDisplayFor
, la convertit en aString
, l'analyse comme aDateTime
, puis la formate comme unString
. Inutilement complexe, à mon avis.Vous pouvez utiliser Convert
<td>@Convert.ToString(string.Format("{0:dd/MM/yyyy}", o.frm_dt))</td>
la source
Voir cette réponse à propos de l'
No overload for method 'ToString' takes 1 arguments
erreur.Vous ne pouvez pas formater un DateTime Nullable - vous devez utiliser la propriété DateTime.Value.
@Model.AuditDate.HasValue ? Model.AuditDate.Value.ToString("mm/dd/yyyy") : string.Empty
la source
'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'