asp.net - 在asp.net MVC中不使用LabelFor Helper获取DisplayName属性

标签 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 html-helper

检索模型中项目的显示名称属性的最佳方法是什么?我看到很多人使用 LabelFor 助手来处理所有事情,但如果我只想列出数据,则标签不合适。如果我只想将其打印出来(例如一个段落),是否有一种简单的方法可以获取名称属性?

最佳答案

<p>
    <%= Html.Encode(
        ModelMetadata.FromLambdaExpression<YourViewModel, string>(
            x => x.SomeProperty, ViewData).DisplayName
    ) %>
<p>

显然,为了避免意大利面条式代码,编写一个助手总是一个好主意:

public static class HtmlExtensions
{
    public static MvcHtmlString GetDisplayName<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper, 
        Expression<Func<TModel, TProperty>> expression
    )
    {
        var metaData = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
        string value = metaData.DisplayName ?? (metaData.PropertyName ?? ExpressionHelper.GetExpressionText(expression));
        return MvcHtmlString.Create(value);
    }
}

然后:

<p>
    <%: Html.GetDisplayName(x => x.SomeProperty) %>
</p>

关于asp.net - 在asp.net MVC中不使用LabelFor Helper获取DisplayName属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885796/

相关文章:

c# - Html.HiddenFor 绑定(bind)到错误的元素

c# - 检测到冲突的 ASP.NET 网页版本

c# - 有没有办法告诉 Visual Studio 在发布的结果中包含子文件夹的配置文件?

asp.net - 将数据集映射到 ASP.NET 中的自定义 .NET 对象

asp.net - 没有 IPN 的 Paypal 集成

asp.net-mvc - 存储库模式中的分页、排序等在哪里?

javascript - jquery提示保存数据onbeforeunload

c# - jqGrid LINQ 和匿名类型

c# - 纯 asp.net Web API 应用程序

asp.net-mvc-3 - 将MVVM应用于ASP.NET MVC。如何进行属性映射?