私のアプリケーションでは、次のような多くのプロパティがあります
[DisplayFormat(ApplyFormatInEditMode=false,ConvertEmptyStringToNull=false,DataFormatString="{0:0.00}")]
public decimal somedecimalvalue { get; set; }
上記の形式が適用される10進数のプロパティが作成されるたびに、これを一般化できる方法はありますか?
私のアプリケーションでは、次のような多くのプロパティがあります
[DisplayFormat(ApplyFormatInEditMode=false,ConvertEmptyStringToNull=false,DataFormatString="{0:0.00}")]
public decimal somedecimalvalue { get; set; }
上記の形式が適用される10進数のプロパティが作成されるたびに、これを一般化できる方法はありますか?
カスタムを作成することにより、モデルの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.csのApplication_Start()
メソッドに登録します。
ModelMetadataProviders.Current = new DecimalMetadataProvider();
DisplayFormat
次に、10進数のプロパティから属性を削除できます。これは他のプロパティには影響せず、10進数のプロパティに他のデータ注釈を安全に追加できることに注意してください。
MetaDataクラスとそのプロパティの詳細をご覧ください。
ハッピーコーディング!:)
あなたが知りたいことを正確に理解することはできません。もう少し説明してください
それを行う直接的な機能はないと思います。1つのインターフェースを持ち、すべてのエンティティに同じものを実装するのはどうですか?
モデルテンプレートを使用してチェックアウトする必要があります。
アプリケーション全体で小数を表示する方法をカスタマイズする場合は、decimal.cshtml(Razorの場合)という名前の部分ビューを作成し、Views / Shared/DisplayTemplatesフォルダーに保存する必要があります。
decimal.cshtmlでは、モデルの10進数の表示方法を制御できます。
このように、編集用に表示する方法をカスタマイズするには、同じ名前で別のビューを作成し、Views / Shared/EditorTemplatesフォルダーにダンプする必要があります。
MVCフレームワークが残りの処理を行います。
元。
ビュー/共有/DisplayTemplates/decimal.cshtml
@model decimal
<p>
@Model.ToString("0.00")
</p>