Modelinizdeki bir öğenin görüntü adı özniteliğini almanın en iyi yolu nedir? Her şey için LabelFor yardımcısını kullanan birçok insan görüyorum, ancak sadece verileri listelemek istesem bir etiket uygun değil. Sadece yazdırmak istiyorsam, bir paragraf belirtmek için İsim Niteliği almanın kolay bir yolu var mı?Asp.net MVC'de LabelFor Yardımcısını kullanmadan DisplayName Özniteliği Alın
cevap
<p>
<%= Html.Encode(
ModelMetadata.FromLambdaExpression<YourViewModel, string>(
x => x.SomeProperty, ViewData).DisplayName
) %>
<p>
Açıkçası bir yardımcı yazmak için iyi bir fikir her zaman olduğu spagetti kod önlemek için: o zaman
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);
}
}
Ve:
<p>
<%: Html.GetDisplayName(x => x.SomeProperty) %>
</p>
Bence sen kullanmalısınız Sonuç türü olarak dizge, aksi halde kodlama mekanizmasını atlarsınız. Başka bir nokta, bazı durumlarda bir Dize olarak DisplayName'e ihtiyacınız olmasıdır (yani, bir WebGrid sınıfındaki sütunları doldurun).
Yeni varolan işlevini denemelisiniz:
<% Html.DisplayNameFor(m => m.YourProperty) %>
Razor: @ Html.DisplayNameFor (model => model.SomeProperty) –
Çok kabul edilen cevaptan daha basit. – VDWWD
Teşekkür ederim, Bu tam da artı daha sonra olduğum şey bu! –
Bunun için aşağıdaki 'using's 'a ihtiyacınız olduğunu unutmayın: using System.Linq; System.Linq.Expressions kullanarak ; –
Bunu yapmanın performans sonuçları nelerdir? Bunu tüm görünümlerde kullanma fikrini beğendim, ancak metni sadece .cshtml – Farinha