我们的数据库存储值及其相关格式。有些数字在小数点后有0个数字,有些是货币等等,
我试图避免在每个实例中都需要显示数据。
@foreach (var i in Model.CandidateHireGoalsAndActivity)
{
if (i.DataTypeId == 3)
{
<tr>
<td>@i.HireGoalName</td>
<td>@i.ActivityValue.ToString("C0")</td>
<td>@i.GoalValue.ToString("C0")</td>
</tr>
}
else if (i.DataTypeId == 2)
{
<tr>
<td>@i.HireGoalName</td>
<td>@i.ActivityValue.ToString("F2")</td>
<td>@i.GoalValue.ToString("F2")</td>
</tr>
}
else if....(etc)
}
我正在尝试编写一个接收字符串和所需格式的基本扩展方法,然后我的代码看起来更像这样。
@foreach (var i in Model.CandidateHireGoalsAndActivity)
{
<tr>
<td>@i.HireGoalName</td>
<td>@Html.FormatString(i.ActivityValue.ToString(), i.DataTypeId)</td>
<td>@Html.FormatString(i.GoalValue.ToString(), i.DataTypeId)</td>
</tr>
}
由于某种原因,从我的助手出来的字符串永远不会格式化。无论我传入的任何未格式化的号码都会被传回。我不确定我做错了什么或错过了什么。
辅助方法:
public static MvcHtmlString FormatString(this HtmlHelper helper, string stringToFormat, int format)
{
if (format == 3)
{
return MvcHtmlString.Create(String.Format("{0:C0}", stringToFormat));
}
return MvcHtmlString.Create(String.Format("{0:0}", stringToFormat));
}
我也试过返回一个常规字符串而不是MvcHtmlString以及使用ToString()方法,但都没有帮助。
非常感谢任何帮助/建议。
谢谢, -Tim
答案 0 :(得分:1)
您的错误是您尝试格式化字符串,而不是数字。 String.Format()
只有在您传递号码时才能格式化。所以你只需要将参数从字符串更改为double:
public static MvcHtmlString FormatString(this HtmlHelper helper, double numberToFormat, int format)
并且不要在视图中转换数字:
@Html.FormatString(i.ActivityValue, i.DataTypeId)
如果您不仅有双倍值,还有其他类型(如浮点数或小数),您可以使用object
代替double
:
public static MvcHtmlString FormatString(this HtmlHelper helper, object numberToFormat, int format)