9

MVC の Display および EditorTemplates に関するこの投稿を見つけました。

http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html

通貨記号で書式設定された 10 進数を簡単に表示するための表示テンプレートを作成します。

例で使用されるモデル:

public class TestModel
{
    public decimal Money { get; set; }
}

表示テンプレート:

ビュー/共有/DisplayTemplates/decimal.cshtml:

@model decimal

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

私のウェブサイトには、10 進数から書式設定された通貨文字列を取得するメソッドを持つヘルパー クラスがあるため、上記を次のように置き換えます。

@model decimal
@(MyHelperClass.GetCurrencyString(Model))

最後に、書式設定された通貨を表示するビュー:

@model TestModel    
@Html.DisplayFor(e => e.Money)

出力:

<span class="currency">$3.50</span>

これで問題なく実装できます。しかし、もちろん、フォーマットされた通貨を表示したい別のビューがあります。しかし、通貨記号を表示したくない場合もあります。

私の質問は、コードでやり過ぎずにこの小さなバリエーションを実装する方法です。

これが私の現在の実装です:

表示テンプレートを次のように変更しました。

@model decimal

@{
    bool woCurrency = (bool)ViewData["woCurrency"]; 
 }

@(MyHelperClass.GetCurrencyString(Model)Model,woCurrency))

もちろん、この追加の属性を受け入れるように GetCurrencyString メソッドにも変更しました。

私の見解では、この属性も提供する必要があります。

@Html.DisplayFor(m => m.Money, new { woCurrency = true })

実際、私はすべてが機能するように機能します。しかし、どういうわけか、ビューをより複雑にするこのソリューションが好きではありません。

あなたへの私の質問: このようなものを実装する他の方法はありますか? または、現在のソリューションを最適化するためのアドバイスはありますか?

ありがとう!

4

2 に答える 2

18

Money プロパティに DisplayFormat 属性を適用する必要があります。例えば:

[DisplayFormat(DataFormatString = "{0:C}")]
public decimal Money { get; set; }

詳細については、次の 2 つのリンクを参照してください。

  1. DisplayFormatAttribute.DataFormatString (ページ下部の例では、例として通貨の書式設定を使用しています)
  2. ASP.NET MVC - DisplayFormat 属性
于 2013-06-03T06:34:05.310 に答える
2

HtmlHelper自動的にチェックしViewData["woCurrency"]て正しい結果を出力するのはどうですか?

    public static string Currency(this HtmlHelper helper, decimal data, string locale = "en-US", bool woCurrency = false)
    {
        var culture = new System.Globalization.CultureInfo(locale);

        if (woCurrency || (helper.ViewData["woCurrency"] != null && (bool)helper.ViewData["woCurrency"]))
            return data.ToString(culture);

        return data.ToString("C", culture);
    }

それで:

@Html.Currency(Model.Money);
于 2013-06-03T06:35:13.060 に答える