Asp.net mvc 按规则显示格式

Asp.net mvc 按规则显示格式,asp.net-mvc,razor,dry,Asp.net Mvc,Razor,Dry,我非常相信只针对规则的例外情况进行开发,因此我正在研究如何避免:用DisplayFormat属性装饰每个数字;为每个标签添加属性;等等 例如,如果我显示一个表,我希望每个小数点都按规则右对齐,以逗号分隔,小数点后两位,如果规则更改,这似乎需要同时更改html和模型。关于如何攻击此问题的选项?在检查规则存储库的控制器中生成Html?DisplayFor扩展方法+样式表+覆盖样式表的某种方式 @foreach ( var item in Model ) { <tr>

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

我想你想在这里使用的是显示模板

您可能会在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。

我认为您希望在这里使用的是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>

然后,此代码将用于呈现您的显示器。

本答案的修改版本,带有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);
    }
}

本答案的一个修改版本,带有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);
    }
}

规则是什么?如何确定?查询字符串中是否存在某个参数,例如,它决定了应该使用的格式?规则是什么?如何确定?例如,查询字符串中是否存在确定应使用的格式的参数?+1,这是我过去所做的,主要用于货币显示。C中的等价物是什么?+1,这是我过去所做的,主要用于货币显示。C中的等价物是什么。