0

次のような注釈があるとします。

[DisplayFormat(DataFormatString = "{0:#.00#}", ApplyFormatInEditMode = true)]

それは素晴らしい働きをします。ただし、DataFormatStringをリアルタイムで置き換えたい場合、つまり、ユーザーが選択したアプリケーション設定に基づいて、この{0:#。00#}や{0:#。000#}のようにする場合があります。それを行う方法はありますか?

フォーマット文字列をグローバル変数に格納しようとしましたが、次のエラーが発生します。

属性の引数は、定数式、typeof式、または属性パラメータータイプの配列作成式である必要があります。

グローバル変数を定数にすると機能しますが、目的が失われます。回避策に関するアドバイスはありますか?

基本的に、ビュー/コントローラーごとに機能を実装しなくても、ユーザーに小数点以下のスペースを普遍的に設定するオプションを提供したいと思います。

NumberFormat.CurrencyDecimalDigitsを使用してカルチャを配置できることはわかっています。ただし、これは小数点以下のゼロを無視します。

4

2 に答える 2

1

属性には定数文字列が必要です。変更することはできません。また、この属性はリソース名を提供する機能を提供しません。したがって、このプロパティのDisplayTemplateとEditorTemplateを作成するのが最善の方法だと思います。

[UIHint("Bar")]
public decimal Bar { get; set; }

また、バーテンプレートでは、ユーザーが選択したいくつかのアプリケーション設定に基づいて形式を変更できます。

@model decimal

@Model.ToString(HttpContext.Current.Session["format"].ToString())
于 2012-12-13T06:54:02.427 に答える
1

MvcExtensionsと呼ばれる優れたライブラリがあります。その機能の1つは、流暢なメタデータ構成です。DataAnnotationsの代わりにモデルメタデータを流暢に構築できます。このライブラリを使用すると、次のタスクを実行できます。

Configure(x => x.Payment)
  .Format(() => ConfigurationManager.DataFormatString)
于 2012-12-13T07:53:02.100 に答える