在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中文网其他相关文章!