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)
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:
[Display(name="")]
vs. [DisplayName("")]
attributes If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With