1

我的页面将显示一些货币数据。我想用货币格式格式化数据,但只使用显示模板。

我有以下代码:

 @foreach (var item in Model.Data)
{
    <tr class="@(item.Group%2==0? "odd-colore": "even-colore")">
    <td>@Html.DisplayFor(modelItem => item.Name)</td>
    <td>@Html.DisplayFor(modelItem => item.Amount1)</td>      
    <td>@Html.DisplayFor(modelItem => item.LName)</td>
    <td>@Html.DisplayFor(modelItem => item.Amount2)</td>
    <td>@Html.DisplayFor(modelItem => item.Amount3)</td>

    </tr>
}   

我创建了一个DisplayTemplate String.cshtml, 因为我的数据类型是字符串:

@model string

@{ 
    IFormatProvider formatProvider = new System.Globalization.CultureInfo("en-US");
    <span class="currency">@Model.ToString("C",formatProvider)</span>
}

但是当我运行它时,我得到了错误:

方法“ToString”没有重载需要 2 个参数

如何使用DisplayTemplatestring.Format("{0:C}")

4

1 回答 1

0

您遇到的问题是因为您试图将 a 转换string为货币。来自MSDN

货币(“C”)格式说明符

“C”(或货币)格式说明符将数字转换为表示货币金额的字符串。

您尝试使用的.ToString(string format, IFormatProvider formatProvider)重载仅存在于数字类型,这就是它不编译的原因。

作为一个例子来证明这一点:

public class TestModel
{
    public decimal Amount { get; set; }
    public string StringAmount { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var model = new TestModel
        {
            Amount = 1.99M,
            StringAmount = "1.99"
        };

        IFormatProvider formatProvider = new CultureInfo("en-US");

        // Prints $1.99
        Console.WriteLine(model.Amount.ToString("C", formatProvider));

        // Prints 1.99
        Console.WriteLine(string.Format(formatProvider, "{0:C}", model.StringAmount));
    }
}

所以你有几个选择:

  1. 将您的数据转换为模板中的数字类型,然后对其进行格式化。
  2. 首先将数据存储为数字类型。

我相信 2 是更好的选择,因为您想要使用数字数据,因此将其存储为字符串只会在计算和格式化时增加复杂性(如您在此处看到的),因为您总是要必须先执行转换。

于 2017-03-13T21:52:52.250 回答