2

私は1つの基本モデル、子モデル、および2番目の子である別のモデルを持っています:

class FirstModel
{
    public virtual decimal? Property1 { get; set; }
}

class SecondModel : FirstModel
{
    public override decimal? Property1 { get; set; }
}

class ThirdModel : SecondModel 
{
    [RequiredIfSubmitting]
    public override decimal? Property1 { get; set; }
}

RequiredIfSubmitting伸びるBaseRequiredAttribute

ビューのカスタム ラベルを作成しています。

public static MvcHtmlString LabelForCustom<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string labelText, object htmlAttributes = null)
{
        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);

            var member = expression.Body as MemberExpression;
            if (member != null)
            {
                // Does it have the required attribute?
                var isRequired = Attribute.GetCustomAttributes(member.Member, typeof(RequiredAttribute), false).Any();

                if (!isRequired)
                {
                    metadata.IsRequired = Attribute.GetCustomAttributes(member.Member, typeof(BaseRequiredAttribute), true).Any();
                }
            }
        }

ThirdModel.Property1 の属性を取得しようとしています。

問題は、reuired/requiredifsubmitting 属性が GetCustomAttributes メソッドで表示されない場合 (なしとして表示される)、metadata.IsRequired が結果として false に設定されることです。

属性を FirstModel Property1 に配置しない限り、metadata.IsRequired は true に設定されます。

必須の派生プロパティを持つ必要のない他のモデルがそれらから継承するため、属性を上位モデル クラスに配置することはできません。

GetCustomAttributes に下位レベルのモデル プロパティの属性を表示させるにはどうすればよいですか?

ありがとう

4

0 に答える 0