MVC Razor 코드에서 열거형 표시 이름 처리
ASP.NET MVC Razor 뷰에서 열거형 멤버의 표시 이름에 액세스하는 것은 사용자에게 친숙한 설명을 제공하는 데 매우 중요합니다. 이 문서에서는 MVC Razor 코드의 컨텍스트에서 이러한 표시 이름을 검색하는 방법을 살펴봅니다.
문제 설명
[Display] 속성으로 장식된 열거형 멤버가 있는 경우 Razor 코드에서 이러한 표시 이름을 추출하는 것이 과제입니다. 작성자는 프로모션 열거 중 선택된 값으로 목록을 채우려고 하며, 각 값은 해당 표시 이름을 표시합니다.
솔루션
이 문제를 해결하기 위해 확장 메서드를 활용하여 열거형을 검사하고 해당 멤버에 적용된 특정 속성을 검색합니다. 확장 메서드에 대한 코드는 다음과 같습니다.
<code class="language-csharp">public static class Extensions { public static TAttribute GetAttribute<TAttribute>(this Enum enumValue) where TAttribute : Attribute { return enumValue.GetType() .GetMember(enumValue.ToString()) .First() .GetCustomAttribute<TAttribute>(); } }</code>
이 방법은 열거형 멤버에 적용된 속성을 검색하는 일반적인 방법으로 사용됩니다. 우리의 경우에는 [Display] 속성을 검색하여 Name 속성을 가져오려고 합니다.
Razor 뷰 구현
이제 확장 메서드를 사용하여 Razor 코드를 다음과 같이 수정할 수 있습니다.
<code class="language-csharp">@foreach (int aPromotion in Enum.GetValues(typeof(UserPromotion))) { var currentPromotion = (int)Model.JobSeeker.Promotion; if ((currentPromotion & aPromotion) == aPromotion) { var displayName = ((UserPromotion)aPromotion).GetAttribute<DisplayAttribute>().Name; <li>@displayName</li> } }</code>
이 코드는 현재 프로모션의 [Display] 속성을 검색하고 해당 Name 속성에 액세스하여 목록 항목에 해당 표시 이름을 표시합니다. 수정된 코드에서는 보다 안전하고 안정적으로 속성을 얻기 위해 유형 변환에 ((UserPromotion)aPromotion)
을 사용합니다.
사용예
샘플 데모를 보려면 다음 코드 조각을 참조하세요.
<code class="language-csharp">public class Foo { public Season Season { get; set; } public void DisplayName() { var seasonDisplayName = Season.GetAttribute<DisplayAttribute>(); Console.WriteLine("Which season is it?"); Console.WriteLine(seasonDisplayName?.Name ?? "Unknown"); // 使用空合并运算符处理可能为null的情况 } } public enum Season { [Display(Name = "It's autumn")] Autumn, [Display(Name = "It's winter")] Winter, [Display(Name = "It's spring")] Spring, [Display(Name = "It's summer")] Summer }</code>
출력:
<code>Which season is it? It's summer</code>
향상된 코드는 더욱 강력해지고 잠재적인 null 참조 예외를 처리하며 확장 메서드를 올바르게 사용하여 Razor 뷰에서 열거형의 표시 이름을 가져오는 방법을 더욱 명확하게 보여줍니다.
위 내용은 ASP.NET MVC Razor 뷰에서 열거형 표시 이름을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!