如何在asp.net核心上本地化以下枚举条目?我在asp.net-core github存储库(https://github.com/aspnet/Mvc/pull/5185)上发现了一些问题,但我找不到合适的方法。
目标枚举:
public enum TestEnum
{
[Display(Name = "VALUE1_RESX_ENTRY_KEY")]
Value1,
[Display(Name = "VALUE3_RESX_ENTRY_KEY")]
Value2
}
CSHTML代码块:
<select id="test" asp-items="Html.GetEnumSelectList<TestEnum>()">
</select>
资源文件:
答案 0 :(得分:1)
似乎是一个错误,将在3.0.0中修复: https://github.com/aspnet/Mvc/issues/7748
服务器端的解决方法如下:
private List<SelectListItem> GetPhoneStateEnumList()
{
var list = new List<SelectListItem>();
foreach (PhoneState item in Enum.GetValues(typeof(PhoneState)))
{
list.Add(new SelectListItem
{
Text = Enum.GetName(typeof(PhoneState), item),
Value = item.ToString()
});
}
return list.OrderBy(x => x.Text).ToList();
}
答案 1 :(得分:0)
我有同样的问题。我的解决方法是明确指定枚举选项:
<select asp-for="Gender" class="form-control">
<option disabled selected>@Localizer["ChooseGender"]</option>
<option value="0">@Localizer["Male"]</option>
<option value="1">@Localizer["Female"]</option>
</select>
答案 2 :(得分:0)
我创建了一个标签助手来本地化枚举,您只需要传递枚举类型和本地化方法的委托即可。
<select-enum
enum-type="typeof(TestEnum)"
selected-value="(int)TestEnum.Value1"
text-localizer-delegate="delegate(string s) { return Localizer[s].Value; }"
name="testEnum">
</select-enum>
或者如果您使用共享资源进行本地化:
<select-enum
enum-type="typeof(TestEnum)"
selected-value="(int)TestEnum.Value1"
text-localizer-delegate="delegate(string s) { return MyLocalizer.Text(s); }"
name="testEnum">
</select-enum>
从块安装:
Install-Package LazZiya.TagHelpers -Version 2.0.0
了解更多here