Ich habe den folgenden Rasiermessercode, für den ich ein mm/dd/yyyy
Datumsformat haben möchte :
Audit Date: @Html.DisplayFor(Model => Model.AuditDate)
Ich habe verschiedene Ansätze ausprobiert, aber keiner dieser Ansätze funktioniert in meiner Situation
Mein AuditDate ist ein DateTime?
Typ
Ich habe so etwas versucht und diesen Fehler erhalten:
@Html.DisplayFor(Model => Model.AuditDate.Value.ToShortDateString())
Zusätzliche Informationen: Vorlagen können nur mit Feldzugriff, Eigenschaftszugriff, eindimensionalem Array-Index oder benutzerdefinierten Indexerausdrücken mit einzelnen Parametern verwendet werden.
Versuchte dies:
@Html.DisplayFor(Model => Model.AuditDate.ToString("mm/dd/yyyy"))
Keine Überladung für die Methode 'ToString' erfordert 1 Argumente
quelle
No overload for method 'ToString' takes 1 arguments
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
ApplyFormatInEditMode = true
der Eigenschaft Folgendes hinzu :[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
. Es sollte offensichtlich sein, aber wenn Sie alle keine Zeit mehr haben, das Kopieren und Einfügen zu verschwenden, könnte dieser Hinweis von Intellisense wie bei mir über Ihre Nase gehen :)Wenn Sie einfach den Wert dieser Modelleigenschaft ausgeben, benötigen Sie den
DisplayFor
HTML-Helfer nicht. Rufen Sie ihn einfach direkt mit der richtigen Zeichenfolgenformatierung auf .Audit Date: @Model.AuditDate.Value.ToString("d")
Sollte ausgeben
Audit Date: 1/21/2015
Schließlich kann Ihr Überwachungsdatum null sein. Sie sollten daher die bedingte Prüfung durchführen, bevor Sie versuchen, einen nullbaren Wert zu formatieren.
Wenn Sie den Fehler googeln, den Sie erhalten, erhalten Sie diese Antwort. Dies zeigt, dass der Fehler auf die Verwendung des Wortes Modell in Ihren HTML-Helfern zurückzuführen ist. Zum Beispiel mit
@Html.DisplayFor(Model=>Model.someProperty)
. Ändern Sie diese, um etwas anderes alsModel
beispielsweise zu verwenden,@Html.DisplayFor(x=>x.someProperty)
oder ändern Sie das Kapital in diesen Helfern inM
Kleinbuchstabenm
.quelle
@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
Helfer zu stellen. Tu das nicht. Sind Sie auch sicher, dass der Fehler in diese Zeile und nicht in eine andere Eigenschaft geworfen wird, für die Sie denDisplayFor
Helfer verwenden möchten?@Model...
habe, erhalte ich folgende Fehlermeldung: 'Model' widerspricht der Deklaration System.Web.Mvc.WebViewPage <TModel> .Model 'Ich habe diese Änderung in meinem Code verwendet:
alter Code:
Neu :
quelle
Die Antwort von @ ChrisPratt zur Verwendung der Anzeigevorlage ist falsch. Der richtige Code, damit es funktioniert, ist:
Das liegt daran, dass
.ToString()
forNullable<DateTime>
keineFormat
Parameter akzeptiert .quelle
Ich habe das Gleiche folgendermaßen implementiert:
2. Geben Sie TextBox in CSS einen Umriss von Null und einen Rand von Null.
Und ...... es ist geschafft :)
quelle
Für mich war es genug zu benutzen
quelle
Sie können das Attribut [ DisplayFormat ] in Ihrem Ansichtsmodell verwenden, um dieses Format für das gesamte Projekt anzuwenden.
quelle
Nach einigem Graben und ich landete Einstellung
Thread
‚s Current Wert haben Culture (‚en-US‘) in der Steuerung Aktionsmethode:Hier sind einige andere Optionen, wenn Sie diese Einstellung für jede Ansicht festlegen möchten.
Informationen zum
CurrentCulture
Immobilienwert:Quelle: MSDN CurrentCulture
Hinweis: Die vorherige
CurrentCulture
Eigenschafteneinstellung ist wahrscheinlich optional, wenn der Controller bereits mitCultureInfo("en-US")
oder ähnlich ausgeführt wird, wenn das Datumsformat vorliegt"MM/dd/yyyy"
.Fügen Sie nach dem Festlegen der
CurrentCulture
Eigenschaft einen Codeblock hinzu, um das Datum in das"M/d/yyyy"
Format in der Ansicht zu konvertieren :Oben ist die
@shortDateLocalFormat
Variable mitToString("M/d/yyyy")
Werken formatiert . WennToString("MM/dd/yyyy")
es verwendet wird, wie ich es zuerst getan habe, haben Sie am Ende das führende Null-Problem . Auch wie von Tommy empfohlenToString("d")
funktioniert auch."d"
Steht eigentlich für "Short Date Pattern" und kann auch mit verschiedenen Kultur- / Sprachformaten verwendet werden.Ich denke, der Codeblock von oben kann auch durch eine coole Hilfsmethode oder ähnliches ersetzt werden.
Beispielsweise
kann mit diesem Hilfsaufruf verwendet werden
Update , ich habe herausgefunden, dass es eine alternative Möglichkeit gibt, dasselbe zu tun, wenn die DateTime.ToString- Methode (String, IFormatProvider) verwendet wird. Wenn dieses Verfahren verwendet wird , dann gibt es keinen Grund zur Verwendung
Thread
‚s -CurrentCulture
Eigenschaft. DasCultureInfo("en-US")
wird als zweites Argument -> IFormatProvider an dieDateTime.ToString(String, IFormatProvider)
Methode übergeben.Modifizierte Hilfsmethode:
.NET Geige
quelle
Vielleicht einfach versuchen
Sie können auch viele Arten von Zeichenfolgenformaten wie .ToString ("TT MMM, JJJJ") .ToString ("TT") usw. verwenden
quelle
@model
es benutzt habe erkennt es nichtM
bei der Verwendung in der HTML-Seite, Kleinbuchstaben bei derm
Deklaration.No overload for method 'ToString' takes 1 arguments
beschwere mich, wenn ich benutzeToString("mm/dd/yyyy")
In der Ansicht Ersetzen Sie dies:
Mit:
Erläuterung: Wenn der AuditDate-Wert nicht null ist, wird das Datum in TT / MM / JJJJ formatiert. Andernfalls lassen Sie es unverändert, da es keinen Wert hat.
quelle
Ich hatte ein ähnliches Problem mit meinem Controller und hier ist, was für mich funktioniert hat:
"DateSigned" ist der Wert aus meinem Modell. Die Zeile lautet: Wenn der Modellwert einen Wert hat, formatieren Sie den Wert, andernfalls wird nichts angezeigt.
hoffentlich hilft das
quelle
Dies ist der beste Weg, um eine einfache Datumszeichenfolge zu erhalten:
quelle
HtmlString
Ausgabe vonDisplayFor
, konvertiert sie in aString
, analysiert sie als aDateTime
und formatiert sie dann als aString
. Meiner Meinung nach unnötig komplex.Sie könnten Konvertieren verwenden
quelle
Siehe diese Antwort zum
No overload for method 'ToString' takes 1 arguments
Fehler.Sie können eine nullfähige DateTime nicht formatieren - Sie müssen die DateTime.Value-Eigenschaft verwenden.
quelle
'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'