模型类的某些属性以枚举形式出现,我们希望在打开编辑表单时在选择列表中显示枚举值。有时我们想要枚举元素名称,但有时我们想要使用自定义名称甚至翻译。
这个例子演示了如何获取枚举元素名称以选择ASP.NET Core上的列表。

假设我们有一个客户实体,其客户类型属性定义为枚举。

public class Customer
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public CustomerTypeEnum Type { get; set; }
}

定义枚举并使其使用DisplayAttribute指定资源文件。

public enum CustomerTypeEnum
{
    [Display(Name = "Companies")]
    PrivateSector,
 
    [Display(Name = "PublicSector", ResourceType = typeof(Resources.Common))]
    PublicSector,
            
    Internal
}

例子中共有三种不同的情况:

  • 枚举成员仅一个名字

  • 具有Display属性和静态名称的Enum成员

  • 具有显示属性和资源文件的枚举成员

我的资源文件在这里。 重要事项:将资源修饰符设置为“公共”(当资源窗口足够宽时,此选项才可见)。

现在添加了一个简单的编辑视图,并使用Html.GetEnumSelectList()扩展方法来填充带有enum成员的选择列表。注意我如何添加第一个空选择(选择类型)作为选择列表的唯一成员。

@model Customer
@{
    ViewData["Title"] = "Edit";
}
 
<h1>Edit</h1>
 
<form asp-action="Edit" class="row">
    <div class="col-4">
        <div asp-validation-summary="All" class="text-danger"></div>
        <input type="hidden" asp-for="Id" />
 
        <div class="form-group">
            <label asp-for="Name" class="control-label"></label>
            <input asp-for="Name" class="form-control" />
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Type" class="control-label"></label>
            <select asp-for="Type" 
                    class="form-control" 
                    asp-items="Html.GetEnumSelectList<CustomerTypeEnum>()">
                <option>Select type ...</option>
            </select>
            <span asp-validation-for="Type" class="text-danger"></span>
        </div>
 
        <div class="form-group">
            <input type="submit" value="Save" class="btn btn-primary" />
        </div>
    </div>
</form>
 
<div>
    <a asp-action="Index">Back to List</a>
</div>

当运行应用程序并移至编辑表单时,可以看到选择列表填充了枚举成员,并且ASP.NET Core带有名称和资源文件的DisplayAttribute。

推广

GitHub:https://github.com/maxzhang1985/yoyogo 基于ASP.NET Core 思想编写的Web框架的 Golang 语言实现 ,如果觉还可以请Star下, 欢迎一起交流。

.NET Core 开源学习群:214741894

版权声明:本文为maxzhang1985原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/maxzhang1985/p/12870661.html