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