、基本クラスのプロパティに属性を追加するには?どのように私はそうのようなカップルのモデルクラスを持っている
答えて
メタデータクラスを使用してみてください。これは、データアノテーションを間接的にモデルクラスに追加できるようにする属性を使用して参照される別のクラスです。
[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase {
... /* the current model code */
}
internal class MyModelMetadata {
[Required]
public string Name { get; set; }
}
誰かがdownvoteについてコメントする気に?技術的には、これは私には正しいように見えます(私のオリジナルの答えに似たものを加えたもの)。 –
これはDataAnnotations名前空間の属性に対してのみ機能するため、一般的な解決策ではありません。 – Marchy
[MSDN](https://msdn.microsoft.com/en-us/library/ff664465%28v=pandp.50%29.aspx)によれば、** MyModel **は部分的である必要があります。 –
仮想として親クラスのプロパティを宣言します。
public class MyModelBase
{
public virtual string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public override string Name { get; set; }
public string SomeOtherProperty { get; set; }
}
それとも、あなたがそうでなければ...限り、あなたはDataAnnotations話していると(検証を処理するたmetadataTypeを使用することができます」上記の例ではまっています):
class MyModelMetadata
{
[Required]
public string Name { get; set; }
public string SomeOtherProperty { get; set; }
}
[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase
{
public string SomeOtherProperty { get; set; }
}
これは、あなたが失いたくない追加の動作がある場合に行く方法です。 +1 – Yuck
基本コンストラクタの潜在的な仮想呼び出しに注意する必要があります。 – nicodemus13
[MSDN](https://msdn.microsoft.com/en-us/library/ff664465%28v=pandp.50%29.aspx)によると** MyModel **は部分的である必要があります。 –
これらの回答のいずれも、実際には基本のNameプロパティを正しく呼び出すことはありません。オーバーライドでは、新しいプロパティに対して別の値を持たないために、次のような記述を行う必要があります。
public class MyModelBase
{
public virtual string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public override string Name { get { return base.Name; } set { base.Name = value; }
public string SomeOtherProperty { get; set; }
}
"new"キーワードでベースプロパティをオーバーロードすることができます。
public class MyModelBase
{
public string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public new string Name {get; set;}
public string SomeOtherProperty { get; set; }
}
- 1. は、どのように私は私はこのようなCSSセレクタのカップルを持っているCSSスタイルに
- 2. は、私はこのようなモデルクラスを持っている
- 3. 私はそうのようなテーブルを持っているSQL
- 4. 私はそうのようなマップを持っているマップ
- 5. どのように私はこのようなテーブル持って
- 6. は、私はそうのようなセクションの行を持って
- 7. はどのように私はそうのようなテーブルA持っている別の列
- 8. は、どのように私はこのようなレポートモデルを持っている
- 9. は、どのように私は、このようなデータを持っている
- 10. SendInput、私はそのようなものを持っている
- 11. は、私はそのようなコード持っているbashの
- 12. は、私はそのようなルートを持っているプロセッサ
- 13. どのように私はのような文字列を持っている
- 14. どのように私はこのようなクラスを持っているJSON
- 15. は、どのように私のようなセットアップを持っているローカルワークスペース
- 16. どのように私はこのようなデータを持っている
- 17. どのように私はこのようなコードを持っているID
- 18. 私はそうのようなドロップダウンリスト持っている私の見解では
- 19. 私はそうのようなHTMLを持って
- 20. 私はそのようなコードを持っている
- 21. どのように私はこのような何か持っているリチウム
- 22. は、私はそのようなリスト持っているリスト
- 23. は、どのように私はそのようなリストを持っているのPython
- 24. リストは、私はそうのようなオブジェクトの配列を持っている
- 25. どのように私は、次のようなリストカンプ持っ
- 26. どのようにPythonの2で、私はそのようなコードを持っているのpython3
- 27. 私はそのようにHTMLを持っているデータに
- 28. は、どのように私は次のように持っているのC#
- 29. どのように私はカップルの簡単なクラスを持っているのScala
- 30. は、どのように私が持っているようなタイプ
データアノテーションについて質問していますか?そうでなければ、あなたは '[必須]'属性を要求しています。 –