在MVC Razor程式碼中處理枚舉顯示名稱
在ASP.NET MVC Razor視圖中,存取枚舉成員的顯示名稱對於向使用者呈現友善的描述至關重要。本文探討如何在MVC Razor程式碼上下文中檢索這些顯示名稱。
問題描述
給定一個用[Display]屬性修飾的枚舉成員,挑戰在於在Razor程式碼中提取這些顯示名稱。作者打算用Promotion枚舉的選定值填入一個列表,每個值都顯示其對應的顯示名稱。
解
為了解決這個問題,我們利用一個擴展方法來內省枚舉並檢索應用於其成員的特定屬性。以下是擴充方法的程式碼:
<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>
改進後的程式碼更健壯,處理了潛在的空引用異常,並更清晰地展示瞭如何正確在Razor視圖中使用擴展方法獲取枚舉的顯示名稱。
以上是如何擷取 ASP.NET MVC Razor 視圖中的枚舉顯示名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!