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

ここでのエラーは、数値ではなく文字列をフォーマットしようとしていることです。String.Format()数値を渡す場合にのみフォーマットできます。したがって、パラメーターを string から double に変更するだけです。

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

ビューで数値を変換しないでください。

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

double 値だけでなく、他のタイプ (float や decimal など) もある場合は、object代わりにdouble次を使用できます。

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