2

Int32 用の追加のエディター テンプレートを作成したいと考えています。その中で、すべての属性(カスタム/デフォルトデータ注釈)を取得し、それらを使用していくつかの作業を行いたい:

@model Int32

@{
    string propertyName = ViewData.ModelMetadata.PropertyName;
    var attributes = ViewData.ModelMetadata.GetSomeHowAllTheAttributesOfTheProperty;
    SomeWorkWithAttribute(attributes);

}
<input type="text" name="@propertyName" value="@ViewData.ModelMetadata.DisplayFormatString" class="form-control"/>

では、EditorTemplate でプロパティのすべての属性を取得する方法について質問します。

事前にThx

4

2 に答える 2

4

編集:最初の回答が削除されました(質問に十分な情報がありません):

カスタム属性にアクセスする必要があるため、次のことをお勧めします。

A : カスタム属性を使用していくつかの値を保存するだけの場合は、次を使用しますAdditionalMetadataAttribute

モデル:

[Additional("myAdditionalInfoField", "myAdditionalInfoValue")]
public int IntProperty { get; set; }

意見:

@{
    string valueFromAttribute = ViewData.ModelMetadata.Additional["myAdditionalInfoField"].ToString();
}

B : カスタム属性内でより複雑な作業を行っている場合は、モデルの現在のメタデータ プロパティを取得し、計算された値をViewData.ModelMetadata.Additionalディクショナリ内に保存します。これには、カスタム メタデータ プロバイダを実装する必要があることに注意してください。詳細な実装については、こちらを参照してください。

于 2014-01-27T12:51:46.707 に答える
4

これは、DisplayTemplate または EditorTemplate からモデル プロパティのすべての属性にアクセスする方法です。

var attributes = ((Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata)ViewData.ModelMetadata).Attributes;

次に、目的のカスタム属性を取得できます。

var yourAttribute = attributes.PropertyAttributes.OfType<YourAttribute>().FirstOrDefault();

今、あなたはあなたがyourAttributeしたいことをしなければなりません!

于 2019-01-22T12:53:26.147 に答える