-1

モデルのメタデータ属性にアクセスして、DataAnnotations に基づいて HtmlAttributes を自動的に追加するヘル​​パーを作成しようとしています。

問題は、属性が常に空であることです。

空のプロジェクトで試す 2 つの基本的なクラスがあります。

namespace MegaInterestingProject
{
    public class HomeController : Controller
    {
        public string Index()
        {
            var model = ModelMetadata.FromLambdaExpression<HomeModel, string>(x => x.User, new ViewDataDictionary<HomeModel>());

            return model.Description;
        }
    }

    public class HomeModel
    {
        [Required]
        [MaxLength(13)]
        [MinLength(11)]
        [DisplayName("displayname")]
        [Description("description")]
        public string User { get; set; }
    }
}

ここで、model.Description は常に空で、AdditionalValues ディクショナリは常に空です。

たぶん、ここに何かが欠けていますか?

GitHub に追加した参照プロジェクトは次のとおりです: https://github.com/erickgirard/TestHtmlAttributesHelper

4

2 に答える 2

0

モデルではなく、モデルのプロパティに属性を配置しました。

モデル内のプロパティのメタデータにアクセスするカスタム ヘルパー関数は次のようになります。

public static MvcHtmlString CustomHelperFunctionFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
    var propertyName = ExpressionHelper.GetExpressionText(expression);
    var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    var displayname = metadata.DisplayName;
    var description = metadata.Description;

    return new MvcHtmlString("have fun!");
}
于 2014-06-19T19:24:59.310 に答える