Disclaimer: the following only works with ASP.NET MVC 3 (see update below if you are using previous versions)
Assuming the following model:
public class MyViewModel { [Display(Description = "some description", Name = "some name")] public string SomeProperty { get; set; } }
And the following view:
<%= Html.LabelFor(x => x.SomeProperty, true) %>
Inside your user helper, you can get this information from metadata:
public static MvcHtmlString LabelFor<TModel, TValue>( this HtmlHelper<TModel> self, Expression<Func<TModel, TValue>> expression, bool showToolTip ) { var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData); var description = metadata.Description;
Note. Having [DisplayName("foo")] and [Display(Name = "bar")] in the same model property is redundant, and the name used in the [Display] attribute takes precedence in metadata.DisplayName .
UPDATE:
My previous answer will not work with ASP.NET MVC 2.0. There are pairs of properties that cannot be populated by default with DataAnnotations in .NET 3.5, and Description is one of them. To achieve this in ASP.NET MVC 2.0, you can use the modelโs own metadata provider:
public class DisplayMetaDataProvider : DataAnnotationsModelMetadataProvider { protected override ModelMetadata CreateMetadata( IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName ) { var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); var displayAttribute = attributes.OfType<DisplayAttribute>().FirstOrDefault(); if (displayAttribute != null) { metadata.Description = displayAttribute.Description; metadata.DisplayName = displayAttribute.Name; } return metadata; } }
which you would register in Application_Start :
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); ModelMetadataProviders.Current = new DisplayMetaDataProvider(); }
and then the assistant should work as expected:
public static MvcHtmlString LabelFor<TModel, TValue>( this HtmlHelper<TModel> self, Expression<Func<TModel, TValue>> expression, bool showToolTip ) { var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData); var description = metadata.Description;