ModelMetadata附加属性始终为空

时间:2014-06-19 18:49:54

标签: asp.net-mvc data-annotations modelmetadata

我正在尝试访问模型的元数据属性,以创建一个帮助程序,以根据DataAnnotations自动添加HtmlAttributes。

问题是,属性总是空的。

我有两个基本类来尝试一个空项目:

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

2 个答案:

答案 0 :(得分:2)

您使用错误的属性生成ModelMetadata。您需要使用DisplayAttribute中的System.ComponentModel.DataAnnotationsDisplayNameAttribute中不是System.ComponentModel

public class HomeModel
{
  [Display(Name = "displayname", Description = "description")]
  public string User { get; set; }
}

答案 1 :(得分: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!");
}