按规则显示格式

时间:2012-07-26 23:17:11

标签: asp.net-mvc razor dry

我非常相信只针对规则的例外情况进行开发,因此我正在考虑如何避免:使用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>
}

2 个答案:

答案 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);
    }
}