【问题标题】:How get the "description" attribute instead the "name" attribute for a model - (MVC asp.net) [duplicate]如何获取模型的“描述”属性而不是“名称”属性-(MVC asp.net)[重复]
【发布时间】:2013-08-14 22:41:15
【问题描述】:

我有一个模型和一个字段...等等。这是微不足道的。但是,我需要从我的视图中获取字段中的“描述”属性和您的“名称”属性。很明显,@Html... 可以用“DisplayNameFor”返回这个。但是,如何获得“描述”属性?没有像 @Html.DisplayDescription 这样的 Helper?有可能得到这个吗?

[Column("abc")]
[Display(Description = "The Description", GroupName = "The Group", Name = "The Name")]
public string field { get; set; }

感谢您的帮助。 对不起英语不好。 ;)

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 data-annotations


    【解决方案1】:

    您可以从元数据中获取它:

    @model MyViewModel
    
    @{
        var description = ModelMetadata.FromLambdaExpression<MyViewModel, string>(x => x.field, ViewData).Description;
    }
    
    @description
    

    或者,如果您像我一样发现要在视图中编写这个绝对可怕的代码,您可以将其封装在可重用的帮助器中:

    public static class HtmlExtensions
    {
        public static IHtmlString DescriptionFor<TModel, TValue>(
            this HtmlHelper<TModel> html, 
            Expression<Func<TModel, TValue>> expression
        )
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
            var description = metadata.Description;
            return new HtmlString(description);
        }
    }
    

    这样在你看来你可以这样使用:

    @model MyViewModel
    
    @Html.DescriptionFor(x => x.field)
    

    【讨论】:

    • 完美!非常感谢@darin-dimitrov
    • 在发布重复之前,请在 SO 上搜索可能的答案 :)
    猜你喜欢
    • 2020-10-05
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多