3

私のアプリケーションでは、次のような多くのプロパティがあります

    [DisplayFormat(ApplyFormatInEditMode=false,ConvertEmptyStringToNull=false,DataFormatString="{0:0.00}")]
public decimal somedecimalvalue { get; set; }

上記の形式が適用される10進数のプロパティが作成されるたびに、これを一般化できる方法はありますか?

4

3 に答える 3

1

カスタムを作成することにより、モデルの10進プロパティのメタデータを手動で割り当てることができますDataAnnotationsModelMetadataProvider

public class DecimalMetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);

        if (propertyName == null)
            return metadata;

        if (metadata.ModelType == typeof(decimal))
        {
            // Given DisplayFormat Attribute:

            // if ApplyFormatInEditMode = true 
            // metadata.EditFormatString = "{0:0.00}";

            // for DataFormatString
            metadata.DisplayFormatString = "{0:0.00}";

            // for ConvertEmptyStringToNull
            metadata.ConvertEmptyStringToNull = false;
        }

        return metadata;
    }
}

次に、このプロバイダーをGlobal.asax.csApplication_Start()メソッドに登録します。

ModelMetadataProviders.Current = new DecimalMetadataProvider();

DisplayFormat次に、10進数のプロパティから属性を削除できます。これは他のプロパティには影響せず、10進数のプロパティに他のデータ注釈を安全に追加できることに注意してください。

MetaDataクラスとそのプロパティの詳細をご覧ください。

ハッピーコーディング!:)

于 2012-05-29T10:58:08.063 に答える
0

あなたが知りたいことを正確に理解することはできません。もう少し説明してください

それを行う直接的な機能はないと思います。1つのインターフェースを持ち、すべてのエンティティに同じものを実装するのはどうですか?

于 2012-05-29T06:19:39.393 に答える
0

モデルテンプレートを使用してチェックアウトする必要があります。

アプリケーション全体で小数を表示する方法をカスタマイズする場合は、decimal.cshtml(Razorの場合)という名前の部分ビューを作成し、Views / Shared/DisplayTemplatesフォルダーに保存する必要があります。

decimal.cshtmlでは、モデルの10進数の表示方法を制御できます。

このように、編集用に表示する方法をカスタマイズするには、同じ名前で別のビューを作成し、Views / Shared/EditorTemplatesフォルダーにダンプする必要があります。

MVCフレームワークが残りの処理を行います。

元。

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

@model decimal
<p>
  @Model.ToString("0.00")
</p>
于 2012-05-29T10:59:49.670 に答える