首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示DisplayAttribute.Description属性值?

如何显示DisplayAttribute.Description属性值?
EN

Stack Overflow用户
提问于 2011-07-05 14:04:08
回答 13查看 49.8K关注 0票数 74

我有一个模型类,其属性如下:

代码语言:javascript
复制
[Display(Name = "Phone", Description="Hello World!")]
public string Phone1 { get; set; }

在我的视图中显示标签和呈现用于输入的文本框非常简单:

代码语言:javascript
复制
@Html.LabelFor(model => model.Organization.Phone1)
@Html.EditorFor(model => model.Organization.Phone1)
@Html.ValidationMessageFor(model => model.Organization.Phone1)

但是如何呈现Description注解属性的值呢?“你好,世界!”??

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-07-05 14:45:28

我最终得到了一个这样的帮手:

代码语言:javascript
复制
using System;
using System.Linq.Expressions;
using System.Web.Mvc;

public static class MvcHtmlHelpers
{
    public static MvcHtmlString DescriptionFor<TModel, TValue>(this HtmlHelper<TModel> self, Expression<Func<TModel, TValue>> expression)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData);
        var description = metadata.Description;

        return MvcHtmlString.Create(string.Format(@"<span>{0}</span>", description));
    }
}

感谢那些把我引向正确方向的人。:)

票数 85
EN

Stack Overflow用户

发布于 2013-09-19 13:14:21

使用本文中关于如何Display visual hints for the fields in your form的技术,您可以通过以下方式访问该值:

代码语言:javascript
复制
@Html.TextBoxFor( 
        model => model.Email , 
        new { title = ModelMetadata.FromLambdaExpression<RegisterModel , string>( 
            model => model.Email , ViewData ).Description } )  
票数 41
EN

Stack Overflow用户

发布于 2016-02-09 22:03:29

我正要使用accepted answer,但它不适用于ASP.NET Core1/2(也称为MVC6),因为ModelMetadata.FromLambdaExpression已不复存在,并已转移到ExpressionMetadataProvider (用法也略有改变)。

这是可与ASP.NET Core1.1和2一起使用的更新扩展方法

代码语言:javascript
复制
using System;
using System.Linq.Expressions;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;

public static class HtmlExtensions
{
    public static IHtmlContent DescriptionFor<TModel, TValue>(this IHtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
    {
        if (html == null) throw new ArgumentNullException(nameof(html));
        if (expression == null) throw new ArgumentNullException(nameof(expression));

        var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, html.ViewData, html.MetadataProvider);
        if (modelExplorer == null) throw new InvalidOperationException($"Failed to get model explorer for {ExpressionHelper.GetExpressionText(expression)}");

        return new HtmlString(modelExplorer.Metadata.Description);
    }
}

ASP.NET核心1

对于ASP.NET Core1,可以使用相同的代码,但需要不同的名称空间usings

代码语言:javascript
复制
using System;
using System.Linq.Expressions;
using Microsoft.AspNet.Html.Abstractions;
using Microsoft.AspNet.Mvc.ViewFeatures;

使用

代码语言:javascript
复制
@Html.DescriptionFor(model => model.Phone1)
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6578495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档