2012-07-26 83 views
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> 
} 
+0

什么是规则?它是如何确定的?查询字符串中是否存在一些参数,例如哪些参数决定了应该使用的格式? – 2012-07-27 05:50:02

回答

4

我想你在这里使用的是DisplayTemplates。

你会保存在您的浏览\共享\文件夹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。

+0

+1,这是我过去所做的,主要是为了显示货币。 – Gromer 2012-10-03 16:59:44

+0

什么将在C#中。 – mark1234 2015-06-10 14:35:14

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