我的页面会显示一些货币数据。 我想用货币格式格式化数据,但只使用显示模板。
我有以下代码:
@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>
}
但是当我运行它时,我收到错误:
方法没有超载&#39; ToString&#39;需要2个参数
如何使用DisplayTemplate
或string.Format("{0:C}")
答案 0 :(得分:0)
您遇到的问题是因为您尝试将string
转换为货币。来自MSDN:
货币(&#34; C&#34;)格式说明符
&#34; C&#34; (或货币)格式说明符将数字转换为表示货币金额的字符串。
您尝试使用的.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));
}
}
所以你有两个选择:
我相信2是更好的选择,因为你想要处理数字数据,所以将它存储为字符串只会增加计算和格式化的复杂性(正如你在这里看到的那样),因为你和#39;必须首先进行转换。