我正在尝试访问模型的元数据属性,以创建一个帮助程序,以根据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
答案 0 :(得分:2)
您使用错误的属性生成ModelMetadata
。您需要使用DisplayAttribute
中的System.ComponentModel.DataAnnotations
(DisplayNameAttribute
中不是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!");
}