繁体   English   中英

.NET Core - 有没有办法在使用 Select Tag Helpler 时将枚举设置为具有默认值?

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM