2

我非常相信只针对规则的例外情况进行开发,所以我正在研究如何避免:用 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>
}
4

2 回答 2

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。

于 2012-10-03T16:54:46.453 回答
0

Ben 的 c# 答案的修改版本。如果模型中没有指定“DisplayFormat”,则使用默认货币。我在 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);
    }
}
于 2018-03-09T14:02:13.133 回答