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

时间:2017-08-15 20:07:56

标签: c# asp.net-core enums asp.net-core-tag-helpers

所以我通过.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>

所以我想要做的是每次将这个枚举渲染到下拉列表中时,我希望它默认选择除第一个之外的值。例如,每次我渲染下拉列表时,它都会显示&#34; 5英里&#34;对用户而不是&#34; 1英里&#34;。我不想改变枚举的顺序,我希望下拉列表在第二个对象上。

通过在枚举上使用标记,有一些简单的方法吗?或者如果没有在枚举中有一些方法可以在标记帮助器中执行此操作吗?

感谢。

3 个答案:

答案 0 :(得分:2)

您需要为模型实例设置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);
}

答案 1 :(得分:0)

这对我有用。 看看:)

export FLASK_ENV=development

答案 2 :(得分:0)

    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>