IT박스

asp.net MVC에서 LabelFor Helper를 사용하지 않고 DisplayName 속성 가져 오기

itboxs 2020. 11. 26. 08:04
반응형

asp.net MVC에서 LabelFor Helper를 사용하지 않고 DisplayName 속성 가져 오기


모델의 항목에 대한 표시 이름 속성을 검색하는 가장 좋은 방법은 무엇입니까? 많은 사람들이 모든 것에 대해 LabelFor 도우미를 사용하는 것을 보지만 데이터를 나열하려는 경우에는 레이블이 적절하지 않습니다. 단락과 같이 인쇄하려는 경우 이름 속성을 얻는 쉬운 방법이 있습니까?


<p>
    <%= Html.Encode(
        ModelMetadata.FromLambdaExpression<YourViewModel, string>(
            x => x.SomeProperty, ViewData).DisplayName
    ) %>
<p>

분명히 스파게티 코드를 피하려면 항상 도우미를 작성하는 것이 좋습니다.

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);
    }
}

그리고:

<p>
    <%: Html.GetDisplayName(x => x.SomeProperty) %>
</p>

새로운 기존 기능을 시도해야합니다.

<% Html.DisplayNameFor(m => m.YourProperty) %>

제 생각에는 문자열을 결과 유형으로 사용해야합니다. 그렇지 않으면 인코딩 메커니즘을 건너 뛰기 때문입니다. 또 다른 요점은 경우에 따라 DisplayName이 문자열로 필요하다는 것입니다 (예 : WebGrid 클래스의 열을 채움).

참고 URL : https://stackoverflow.com/questions/3885796/get-displayname-attribute-without-using-labelfor-helper-in-asp-net-mvc

반응형