我非常相信只针对规则的例外情况进行开发,因此我正在考虑如何避免:使用DisplayFormat属性装饰每个数字;向每个标签添加属性;等
例如,如果我显示一个表格,我希望每个小数点右对齐,逗号分隔,按规则到两个小数位,如果规则更改,这似乎需要更改html和模型。关于如何攻击这个的选项?控制器中的Html生成检查规则库? DisplayFor扩展方法+样式表+某种方式来覆盖样式表?
@foreach ( var item in Model )
{
<tr>
<td>@Html.DisplayFor(mi => item.ItemName)</td>
<td align="right">@Html.DisplayFor(mi => item.NewPrice)</td>
<td>@Html.DisplayFor(mi => item.CurrentPrice, "Decimal")</td>
<td align="right">@Html.DisplayFor(mi => item.MyPrice)</td>
<td align="right">@Html.DisplayFor(mi => item.Markup)</td>
</tr>
}
答案 0 :(得分:4)
我认为你想在这里使用的是DisplayTemplates。
您可以在Views \ Shared \ DisplayTemplates文件夹中保存类似以下部分视图的内容(对不起VB语法):
@ModelType Nullable(Of Decimal)
@Code
Dim value As String
value = If(ViewData.TemplateInfo.FormattedModelValue Is Nothing, "", ViewData.TemplateInfo.FormattedModelValue)
value = String.Format("{0:C}", value)
End Code
<div class="displayCurrency">@Html.Encode(value)</div>
然后,此代码将用于呈现您的DisplayFor。
答案 1 :(得分:0)
Ben用c#回答的修改版本。如果没有&#39; DisplayFormat&#39;在模型中指定,然后使用默认的货币。我在Views \ Shared \ DisplayTemplates文件夹中创建了double.cshtml:
@model double?
@{
if (ViewData.ModelMetadata.DisplayFormatString == null)
{
<span class="currency">@String.Format("{0:C}", @Model)</span>
}
else
{
@String.Format(ViewData.ModelMetadata.DisplayFormatString, @Model);
}
}