asp-您可以在属性中使用 Linq 扩展方法。
- 但由于
SelectListItem不包含原始枚举值,您需要使用Int32.Parse或Int32.TryParse获取这些值。
- 如果 ASP.NET 决定将您的枚举值呈现为文本/字符串而不是整数,这将中断。
Html
.GetEnumSelectList<EVOwnerType>()
.Select( opt => ( opt, value: (EVOwnerType)Int32.Parse( opt.Value ) ) )
.Where( t => t.value == EVOwnerType.vip || t.value == EVOwnerType.guest || t.value == this.Model.evOwner.evpriority )
.Select( t => t.opt )
这将需要打包成一行:
<select asp-for="evOwner.evpriority" class="form-control" asp-items="Html.GetEnumSelectList<EVOwnerType>().Select( opt => ( opt, value: (EVOwnerType)Int32.Parse( opt.Value ) ) ).Where( t => t.value == EVOwnerType.vip || t.value == EVOwnerType.guest || t.value == this.Model.evOwner.evpriority ).Select( t => t.opt )">
<option selected="selected" value="">please select</option>
</select>
......这不漂亮。
这就是为什么你真的应该单独生成列表(在你的控制器操作中,或者@{}在你视图中的代码块中)。
或者:在视图中的 Razor 代码块中生成列表:
考虑这个替代方案:
@{
List<SelectListItem> enumItems = this.Html.GetEnumSelectList<EVOwnerType>()
.Select( opt => ( opt, value: (EVOwnerType)Int32.Parse( opt.Value ) ) )
.Where( t => t.value == EVOwnerType.vip || t.value == EVOwnerType.guest || t.value == this.Model.evOwner.evpriority )
.Select( t => t.opt )
.ToList();
}
<!-- etc -->
<select asp-for="evOwner.evpriority" class="form-control" asp-items="enumItems">
<option selected="selected" value="">please select</option>
</select>
好多了!