如果您已定义自定义DisplayTemplate,是否有某种方法可以使用为该对象定义的DisplayFormat.DataFormatString
?
例如,我为Double
:
<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>
然后我的模型定义了一个DisplayFormat:
[Display(Name = "In Weight")]
[DisplayFormat(DataFormatString = "{0} lb")]
public double? InWeight{ get; set; }
在上面的示例中,DisplayTextFor
仅提供一个简单的ToString(),而将其替换为DisplayFor
则不会呈现任何内容。
答案 0 :(得分:2)
@Html.DisplayTextFor(m => m)
方法未考虑DisplayFormatAttribute
和@Html.DisplayFor(m => m)
不起作用,因为它会递归调用自身创建无限循环。您需要访问属性ModelMetadata
。
另请注意,您没有生成表单控件,因此使用<label>
元素是不合适的。
您的模板应该类似于
@model System.Double
<div>
<div>@ViewData.ModelMetadata.GetDisplayName()</div>
<div>@string.Format(ViewData.ModelMetadata.DisplayFormatString ?? "{0:0.00}", Model)</div>
</div>
并将类名添加到封闭元素中以对其进行样式设置
注意我添加了一个&#39;默认&#39;可能未应用[DisplayFormat]
的属性的格式。
附注:由于属性为nullable
,您还可以通过添加类似
@if (Model == null)
{
<div>@(ViewData.ModelMetadata.NullDisplayText ?? "Not assigned")</div>
}
else
{
<div>@string.Format(ViewData.ModelMetadata.DisplayFormatString ?? "{0:0.00}", Model)</div>
}