sourcecode

asp.net MVC에서 LabelForHelper를 사용하지 않고 DisplayName 특성을 가져옵니다.

copyscript 2023. 6. 13. 22:31
반응형

asp.net MVC에서 LabelForHelper를 사용하지 않고 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

반응형