ASP.NET Core中结合枚举和资源文件显示列表

2020-05-13 09:45:02 浏览数 (1)

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

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

代码语言:javascript复制
public class Customer
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public CustomerTypeEnum Type { get; set; }
}

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

代码语言:javascript复制
public enum CustomerTypeEnum
{
    [Display(Name = "Companies")]
    PrivateSector,
 
    [Display(Name = "PublicSector", ResourceType = typeof(Resources.Common))]
    PublicSector,
            
    Internal
}

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

  • 枚举成员仅一个名字
  • 具有Display属性和静态名称的Enum成员
  • 具有显示属性和资源文件的枚举成员

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

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

代码语言:javascript复制
@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。

0 人点赞