ShortName in the Display attribute (DataAnnotations)

跟風遠走 提交于 2019-12-13 14:24:27

问题


Name attribute works proper, but ShortName doesn't work.

[Display(Name = "Date of the transfer the task", ShortName = "Trans date")]
public DateTime TransferDate { get; set; }

Even when I delete Name attribute, ShortName is ignored ("TransferDate" displays in the column header).

In the view I do this:

@Html.DisplayNameFor(model => model.TransferDate)

回答1:


If you look at the Description for the ShortName property on the Display Attribute you'll see that it has a pretty limited scope out of the box:

Of course, that doesn't limit you from leveraging that value on your Model Metadata, but there aren't any native helpers that do so.

Starting with MVC 2, ModelMetadata provides two methods to access the underlying data: FromStringExpression and FromLambdaExpression, so you don't really need to start from scratch in writing your own helper or extension method.

If you hate writing HTML helper methods, you can do this all inline:

@ModelMetadata.FromLambdaExpression<RegisterModel, string>( 
            model => model.TransferDate, ViewData).ShortDisplayName} )  

But it's also perfectly valid to add an extension method for consistency of access, deduplication of code, and improved error handling

public static class MvcHtmlHelpers
{
   public static MvcHtmlString ShortNameFor<TModel, TValue>(this HtmlHelper<TModel> self, 
           Expression<Func<TModel, TValue>> expression)
   {
       var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData);
       var name = metadata.ShortDisplayName ?? metadata.DisplayName ?? metadata.PropertyName;

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

And then use like any other helper method:

@Html.ShortNameFor(model => model.TransferDate)

Further Reading:

  • How do I display the DisplayAttribute.Description attribute value?
  • MVC has long subsisted on custom extension methods, like needing DisplayNameFor before it was added in MVC 4
  • See this question for a quick breakdown of the differences between [Display(name="")] vs. [DisplayName("")] attributes
  • See this answer for working with ASP.NET MVC 6 / Core 1


来源:https://stackoverflow.com/questions/24155299/shortname-in-the-display-attribute-dataannotations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!