1

我们的数据库存储值及其相关格式。有些数字在小数点后有 0 个数字,有些是 1,有些是货币等。

我试图避免在需要显示数据的每个实例中执行以下操作。

@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() 方法,但都没有帮助。

非常感谢任何帮助/建议。

谢谢,-蒂姆

4

1 回答 1

1

Your error here is you are trying to format a string, not a number. String.Format() can format only if you pass a number. So you just simply need to change parameter from string to double:

public static MvcHtmlString FormatString(this HtmlHelper helper, double numberToFormat, int format)

And don't convert numbers in the view:

@Html.FormatString(i.ActivityValue, i.DataTypeId)

If you have not only double values, but also other types (like float or decimal) you can use object instead of double:

public static MvcHtmlString FormatString(this HtmlHelper helper, object numberToFormat, int format)
于 2012-11-20T13:12:27.207 回答