[英].NET Core - Is there a way to set an enum to have a default value when using a Select Tag Helpler?
所以我通过 .NET Core 标签助手将枚举转换为下拉列表。 这是很标准的。
枚举
public enum DistanceType
{
[Display(Name = "1 Mile")]
[Description("1")]
OneMile = 1,
[Display(Name = "5 Miles")]
[Description("5")]
FiveMiles = 2,
[Display(Name = "10 Miles")]
[Description("10")]
TenMiles = 3,
[Display(Name = "20 Miles")]
[Description("20")]
TwentyMiles = 4
}
查看
<select asp-for="EnumDistanceType" asp-items="Html.GetEnumSelectList<DistanceType>()">
</select>
所以我想要做的是每次我将此枚举渲染到下拉列表中时,我希望它默认选择第一个以外的值。 例如,每次我渲染下拉菜单时,它都会向用户显示“5 英里”而不是“1 英里”。 我不想更改枚举的顺序,但我希望下拉列表位于第二个对象上。
是否有一些简单的方法可以通过在枚举上使用标签来做到这一点? 或者如果不在枚举中,是否有某种方法可以在标签助手中做到这一点?
谢谢。
您需要为模型实例设置EnumDistanceType
属性的值。
假设您的模型类是
public class DistanceViewModel
{
public DistanceType EnumDistanceType { get; set; }
}
那么您的控制器操作可能是:
public IActionResult DistanceOption(int id)
{
var model = new DistanceViewModel();
model.EnumDistanceType = DistanceType.FiveMiles;
return View(model);
}
public static class HtmlHelperExtensions
{
public static IEnumerable<SelectListItem> GetEnumSelectListWithDefaultValue<TEnum>(this IHtmlHelper htmlHelper, TEnum defaultValue)
where TEnum : struct
{
var selectList = htmlHelper.GetEnumSelectList<TEnum>().ToList();
selectList.Single(x => x.Value == $"{(int)(object)defaultValue}").Selected = true;
return selectList;
}
}
用法:
<select asp-for="EnumProperty" asp-items="Html.GetEnumSelectListWithDefaultValue<SomeEnum>(defaultValue: SomeEnum.SomeEnumValue)">
</select>
这对我有用。 看看:)
<select asp-for="EnumDistanceType" asp-items="Html.GetEnumSelectList<DistanceType>()">
<option selected value="2">FiveMiles</option>
</select>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.