2016-06-06 15 views
0

Wenn Sie ein benutzerdefiniertes DisplayTemplate definiert haben, gibt es eine Möglichkeit, die für dieses Objekt definierte DisplayFormat.DataFormatString zu verwenden?Verwenden Sie DisplayFormat in einem benutzerdefinierten DisplayTemplate

Zum Beispiel habe ich eine DisplayTemplate für Double definiert haben:

<div class="form-group"> 
    @Html.Label("", ViewData["label"] as string, new { @class = "col-sm-6" }) 
    <p class="col-sm-6"> 
     @Html.DisplayTextFor(m => m) 
    </p> 
</div> 

Dann definiert mein Modell ein Displayformat:

[Display(Name = "In Weight")] 
[DisplayFormat(DataFormatString = "{0} lb")] 
public double? InWeight{ get; set; } 

Im obigen Beispiel stellt DisplayTextFor nur eine einfache ToString() , während es durch DisplayFor ersetzt wird, macht nichts.

+0

einschließlich dieses weiter verbessern Warum Sie verwenden '@ Html.Label()', wenn Sie Formular-Steuerelement nicht ein zugehöriges haben . Der Grund dafür, dass 'DisplayFor()' nicht funktioniert, ist, dass es sich selbst weiterhin aufruft. Sie könnten auf die Eigenschaften 'ModelMetadata' zugreifen, um den formatierten Wert –

+0

@StephenMuecke zu generieren. Sie haben recht, wahrscheinlich ist es besser, in diesem Fall eine' dl'-Beschreibungsliste zu verwenden, aber die Frage wäre die gleiche für die Formatierung des Wertes. –

Antwort

2

Die @Html.DisplayTextFor(m => m) Methode berücksichtigt nicht die DisplayFormatAttribute und @Html.DisplayFor(m => m) funktioniert nicht, weil es sich selbst rekursiv aufrufen würde Erstellen einer Endlosschleife. Sie müssen auf die Eigenschaften ModelMetadata zugreifen.

Hinweis: Sie generieren auch keine Formularsteuerung, daher wäre die Verwendung eines <label> Elements nicht geeignet.

Ihre Vorlage sollte so etwas wie

@model System.Double 
<div> 
    <div>@ViewData.ModelMetadata.GetDisplayName()</div> 
    <div>@string.Format(ViewData.ModelMetadata.DisplayFormatString ?? "{0:0.00}", Model)</div> 
</div> 

aussehen und Klassennamen zu den einschließenden Elemente hinzuzufügen, um zu Stil

Hinweis Ich habe einen ‚default‘ Format für Eigenschaften hinzugefügt, wo die [DisplayFormat] kann nicht angewendet werden, .

Randbemerkung: Da die Eigenschaft nullable ist, könnten Sie auch so etwas wie

@if (Model == null) 
{ 
    <div>@(ViewData.ModelMetadata.NullDisplayText ?? "Not assigned")</div> 
} 
else 
{ 
    <div>@string.Format(ViewData.ModelMetadata.DisplayFormatString ?? "{0:0.00}", Model)</div> 
} 
Verwandte Themen