Asp.net mvc 2 只是显示名称的文本

Asp.net mvc 2 只是显示名称的文本,asp.net-mvc-2,metadata,html-helper,Asp.net Mvc 2,Metadata,Html Helper,如何在视图中只放置模型属性的DisplayName属性的值,而不使用Html.LabelFor()Html.LabelFor()不适合我,因为它让我,这会破坏我的页面布局。 下面是模型属性的示例: [DisplayName("House number")] [Required(ErrorMessage = "You must specify house number")] [Range(1, 9999, ErrorMessage = "You have speci

如何在视图中只放置模型属性的
DisplayName
属性的值,而不使用
Html.LabelFor()
Html.LabelFor()
不适合我,因为它让我
,这会破坏我的页面布局。 下面是模型属性的示例:

[DisplayName("House number")]
        [Required(ErrorMessage = "You must specify house number")]
        [Range(1, 9999, ErrorMessage = "You have specify a wrong house number")]
        public UInt32? buildingNumber
        {
            get { return _d.buildingNumber; }
            set { _d.buildingNumber = value; }
        }

提前谢谢你们,伙计们

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

<%
    var displayName = ModelMetadata
        .FromLambdaExpression(x => x.buildingNumber, Html.ViewData)
        .DisplayName;
%>

<%= displayName %>
@ModelMetadata.FromLambdaExpression(m => m.buildingNumber, ViewData).DisplayName
x.buildingNumber,Html.ViewData)
.显示名称;
%>

这应该从元数据中获取displayname:

<%
    var displayName = ModelMetadata
        .FromLambdaExpression(x => x.buildingNumber, Html.ViewData)
        .DisplayName;
%>

<%= displayName %>
@ModelMetadata.FromLambdaExpression(m => m.buildingNumber, ViewData).DisplayName
编辑:

我认为您仍然可以使用MVC2的语句,只需更改@:

m.buildingNumber,ViewData).DisplayName%>

大量借用了,我创建了一个扩展方法来实现这一点。它的输出带有span标记,这些标记始终是安全的。您还可以修改它以完全省略span标记(消除两个重载,因为在这种情况下您永远不能获取属性)

使用此内容创建一个类,确保您的页面正在导入该类的名称空间,然后在视图中使用它,如
Html.DisplayNameFor(x=>x.Name)

公共静态类DisplayNameForHelper
{
公共静态MvcHtmlString DisplayNameFor(此HtmlHelper html,表达式)
{
返回DisplayNameFor(html、表达式、新RouteValueDictionary());
}
公共静态MvcHtmlString DisplayNameFor(此HtmlHelper html、表达式、对象htmlAttributes)
{
返回DisplayNameFor(html、表达式、新RouteValueDictionary(htmlAttributes));
}
公共静态MvcHtmlString DisplayNameFor(此HtmlHelper html、表达式、IDictionary htmlAttributes)
{
ModelMetadata=ModelMetadata.FromLambdaExpression(表达式,html.ViewData);
字符串htmlFieldName=ExpressionHelper.GetExpressionText(表达式);
字符串labelText=metadata.DisplayName??metadata.PropertyName??htmlFieldName.Split('.').Last();
if(String.IsNullOrEmpty(labelText))
{
返回MvcHtmlString.Empty;
}
标记生成器标记=新标记生成器(“span”);
合并属性(htmlAttributes);
tag.SetInnerText(labelText);
返回MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}
}

谢谢你的回答,马丁!你的答案是MVC3 Razor视图引擎,但我使用MVC2,所以我不能。谢谢Darin!这就是我所需要的。我只在MVC3中测试了这个,因为我现在手头上没有MVC2项目,但我希望它在没有MVC3的情况下也能正常工作。