-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

2

您使用错误的属性来生成ModelMetadata. 您需要使用DisplayAttributein System.ComponentModel.DataAnnotations(而不是DisplayNameAttributein System.ComponentModel.

public class HomeModel
{
  [Display(Name = "displayname", Description = "description")]
  public string User { get; set; }
}
于 2014-08-10T03:18:35.947 回答
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 回答